[其他ST产品] STM32CubeMX——串口通信

[复制链接]
 楼主| 王派oo 发表于 2023-1-28 12:21 | 显示全部楼层
举例:
  1. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  2. {
  3.   if(huart->Instance == USART1){
  4.                 if(receive_data=='1'){
  5.                         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, 0);
  6.                 }
  7.                 else if(receive_data=='0'){
  8.                         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, 1);
  9.                 }
  10.                 else{
  11.                         //HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
  12.                 }
  13.         }
  14.         HAL_UART_Receive_IT(&huart1, &receive_data, 1);
  15. }
 楼主| 王派oo 发表于 2023-1-28 12:22 | 显示全部楼层
main.c函数具体代码
  1. /* USER CODE BEGIN 0 */
  2. uint8_t send_data[] = "hello world\r\n";
  3. uint8_t receive_data;

  4. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  5. {
  6.   if(huart->Instance == USART1){
  7.                 if(receive_data=='1'){
  8.                         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, 0);
  9.                 }
  10.                 else if(receive_data=='0'){
  11.                         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, 1);
  12.                 }
  13.                 else{
  14.                         //HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
  15.                 }
  16.         }
  17.         HAL_UART_Receive_IT(&huart1, &receive_data, 1);
  18. }
  19. /* USER CODE END 0 */

  20. /**
  21.   * [url=home.php?mod=space&uid=247401]@brief[/url]  The application entry point.
  22.   * @retval int
  23.   */
  24. int main(void)
  25. {
  26.   /* USER CODE BEGIN 1 */

  27.   /* USER CODE END 1 */
  28.   

  29.   /* MCU Configuration--------------------------------------------------------*/

  30.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  31.   HAL_Init();

  32.   /* USER CODE BEGIN Init */

  33.   /* USER CODE END Init */

  34.   /* Configure the system clock */
  35.   SystemClock_Config();

  36.   /* USER CODE BEGIN SysInit */

  37.   /* USER CODE END SysInit */

  38.   /* Initialize all configured peripherals */
  39.   MX_GPIO_Init();
  40.   MX_USART1_UART_Init();
  41.   /* USER CODE BEGIN 2 */
  42.   HAL_UART_Receive_IT(&huart1, &receive_data, 1);  //在这里面一定不要忘记开启串口中断
  43.   /* USER CODE END 2 */

  44.   /* Infinite loop */
  45.   /* USER CODE BEGIN WHILE */
  46.   while (1)
  47.   {
  48.     /* USER CODE END WHILE */
  49.                 HAL_UART_Transmit(&huart1, send_data , sizeof(send_data), 1000);
  50.                 HAL_Delay(1000);
  51.     /* USER CODE BEGIN 3 */
  52.   }
  53.        
  54.   /* USER CODE END 3 */
  55. }
 楼主| 王派oo 发表于 2023-1-28 12:24 | 显示全部楼层
总结

串口操作的具体流程:

    初始化串口
    如果是发送操作直接在无限循环中调用串口发送函数
    如果是接收数据操作,则现在main函数的初始化中调用串口接收中断函数。
    进入中断后,接收完数据  进入中断回调函数
    重写中断回调函数,并且在此函数中处理接收的数据
    处理完数据,一定要在回调函数中再调用一次HAL_UART_Receive_IT函数,使得程序可以重新触发接收中断
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部