[STM32F1] HAL库多个串口无法进其中一个中断的问题

[复制链接]
1111|1
 楼主| wdliming 发表于 2019-8-2 20:31 | 显示全部楼层 |阅读模式
本人用串口1和串口4分别进行中断的接受,
在初始化之后,首先在main函数中
调用:
HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1); //添加开启接收中断的语句:
HAL_UART_Receive_IT(&huart4, (uint8_t *)&bRxBuffer, 1);
aRxBuffer
bRxBuffer
为全局变量,

callbak函数为;
  1. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  2. {
  3.     if (huart->Instance == USART1) //如果是串口1
  4.     {
  5.         if (USART1_Rx_Cnt >= 255) //溢出判断
  6.         {
  7.             USART1_Rx_Cnt = 0;
  8.             memset(USART1_RxBuff, 0x00, sizeof(USART1_RxBuff));
  9.             //可以做一些命令
  10.                         RS485PA8_TX;
  11.             HAL_UART_Transmit(&huart1, (uint8_t *)&cAlarmStr, sizeof(cAlarmStr), 0xFFFF);
  12.                         RS485PA8_RX;
  13.         }
  14.         else
  15.         {
  16.             USART1_RxBuff[USART1_Rx_Cnt++] = aRxBuffer;   //接收数据转存

  17.             //判断结束符,LF=0x0a, 0x0d=CR,意为回车换行,后期可修改
  18.             if ((USART1_RxBuff[USART1_Rx_Cnt - 1] == 0x0A) && (USART1_RxBuff[USART1_Rx_Cnt - 2] == 0x0D)) //判断结束位
  19.             {
  20.                 //can do some action eg: send USART1_RxBuff using freertos's queue
  21.                 //UART1_CallBack(UART4_RxBuff, ctn);
  22.                                 RS485PA8_TX;
  23.                 HAL_UART_Transmit(&huart1, (uint8_t *)&USART1_RxBuff, USART1_Rx_Cnt, 0xFFFF); //将收到的信息发送出去
  24.                 RS485PA8_RX;
  25.                                 USART1_Rx_Cnt = 0;
  26.                 memset(USART1_RxBuff, 0, sizeof(USART1_RxBuff)); //清空数组
  27.             }
  28.         }
  29.         HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1);   //再开启接收中断
  30.     }

  31.     else if (huart->Instance == UART4) //如果是串口4
  32.     {
  33.         if (UART4_Rx_Cnt >= 255) //溢出判断
  34.         {
  35.             UART4_Rx_Cnt = 0;
  36.             memset(UART4_RxBuff, 0x00, sizeof(UART4_RxBuff));
  37.             //可以做一些命令
  38.                         RS485PC9_TX;
  39.             HAL_UART_Transmit(&huart4, (uint8_t *)&cAlarmStr, sizeof(cAlarmStr), 0xFFFF);
  40.                         RS485PC9_RX;
  41.         }
  42.         else
  43.         {
  44.             UART4_RxBuff[UART4_Rx_Cnt++] = bRxBuffer;   //接收数据转存

  45.             //判断结束符,LF=0x0a, 0x0d=CR,意为回车换行,后期可修改
  46.             if ((UART4_RxBuff[UART4_Rx_Cnt - 1] == 0x0A) && (UART4_RxBuff[UART4_Rx_Cnt - 2] == 0x0D)) //判断结束位
  47.             {
  48.                 //can do some action eg: send UART4_RxBuff using freertos's queue
  49.                 //UART1_CallBack(UART4_RxBuff, ctn);
  50.                                 RS485PC9_TX;
  51.                 HAL_UART_Transmit(&huart4, (uint8_t *)&UART4_RxBuff, UART4_Rx_Cnt, 0xFFFF); //将收到的信息发送出去
  52.                                 RS485PC9_RX;
  53.                 UART4_Rx_Cnt = 0;
  54.                 memset(UART4_RxBuff, 0, sizeof(UART4_RxBuff)); //清空数组
  55.             }
  56.         }
  57.         HAL_UART_Receive_IT(&huart4, (uint8_t *)&bRxBuffer, 1);   //再开启接收中断
  58.     }
  59. }
我在串口助手中发串口1,正常工作,但是硬件练到串口4中,就无法进中断,
请问这是为什么,
那位大侠指点下。谢谢
 楼主| wdliming 发表于 2019-8-2 20:49 | 显示全部楼层
那位大侠可否指点下啊~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:我的未来不是梦

76

主题

914

帖子

4

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