STM32 HAL庫快速實戰【四】《串口簡單使用》--基於黑龍江科技大學機電工業機器人實訓


系列目錄:

前言

后續電機以及藍牙模塊都需要用到串口,因此這里簡單的先介紹下

配置CubeMX

可以使用上節配置好的demo復制后繼續配置,也可以重新生成,這里不多贅述。
Pinout & Configuration > A-Z > USART1
Mode 選擇異步,Asynchronous
波特率其他的可以不用變。
image
Pinout & Configuration > A-Z > NVIC
啟用串口1中斷
image
GENERATE CODE生成代碼,Open Project

編寫代碼

首先要啟用MicroLIB庫
image

通過重寫stdio函數,可以在32上使用printf輸出以及getchar輸入等函數。
先引入stdio庫

/* USER CODE BEGIN Includes */
#include "stdio.h"
/* USER CODE END Includes */

然后重寫fputc函數以及fgetc函數。注意,注釋部分可以不用管。

/* USER CODE BEGIN 0 */

int fputc(int ch, FILE *stream)    //重寫fputc函數
{
 /*
    huart1是工具生成代碼定義的UART1結構體,
    如果以后要使用其他串口打印,只需要把這個結構體改成其他UART結構體。
	使用HAL_UART_Transmit時,可以直接調用,使用IT,DMA,VCP方式時,需要對返回值判斷,不然會出現只能發送一個字節的情況。
	安全起見,建議全部使用while判斷。
*/
	//HAL_UART_Transmit(&huart1, (unsigned char *)&ch, 1,1000);//輪詢阻塞方式
	while(HAL_UART_Transmit_IT(&huart1, (unsigned char *)&ch, 1)!=HAL_OK){};//中斷方式
    return 1;
}
int fgetc(FILE *f)
{
  uint8_t ch = 0;
	//HAL_UART_Receive(&huart1, &ch, 1, 0xffff);//輪詢阻塞方式
	while(HAL_UART_Receive_IT(&huart1, &ch, 1)!=HAL_OK){};
  return ch;
}

/* USER CODE END 0 */

實際上在這里使用了兩種輸入輸出方法,即輪詢以及中斷,HAL_UART_Receive(&huart1, &ch, 1, 0xffff)是從huart1接收1個字符儲存到ch,等待0xffffms,超時后結束
HAL_UART_Receive_IT(&huart1, &ch, 1)和上面一樣,但是沒有等待時間,執行后就結束,因此需要對返回值判斷,接收成功后再繼續執行其他代碼。
然后就可以像再電腦運行c程序一樣在32上執行一些代碼。不同的是電腦輸出到屏幕上,按鍵輸入,32輸入輸出都在串口上。
下面是一個接收輸入值並打印出來的代碼。

  /* USER CODE BEGIN WHILE */
  int speed=500;
  char input;
  while (1)
  {
    /* USER CODE END WHILE */
    /* USER CODE BEGIN 3 */
	  __HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,speed);//這個是之前舵機的代碼,CubeMX重新生成的代碼注意有沒有配置定時器
	 HAL_GPIO_TogglePin(led_GPIO_Port,led_Pin);//這個是之前點燈的代碼,CubeMX重新生成的代碼注意有沒有配置GPIO
	  speed+=3;
	  input=getchar();
	  printf("led togglePin,speed [%d],you input %c \r\n",speed,input);
	  
  }
  /* USER CODE END 3 */

串口通信

打開串口通信程序,選擇對應串口及波特率等,打開串口后填入任意字符,發送后即在屏幕上打印出對應輸出。
image

工程源碼

國內用戶請使用gitee克隆或是使用代理訪問Github
https://github.com/USTHzhanglu/stm32-hal/tree/main/uart


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM