你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

CUBEmx HAL_UART_Receive_IT 单字节接收问题

[复制链接]
wyfar 提问时间:2018-8-6 20:39 /
      CUBEmx实现串口通信(CUBEMX配置初始化先省略了)芯片STM32F103VC, 利用HAL_UART_Receive_IT()中断接收,回调函数将接收到的数据发回给PC(调试助手)。用串口调试助手自动发送2个字节及以上,中断接收正常。但是串口调试助手自动发单个字节时,中断接收不连续,会丢掉很多字节。      主函数相关代码如下:

while(HAL_UART_Receive_IT(&huart1,aRxBuffer1,1)==HAL_OK);
while (1)
  {

   HAL_Delay(200);
         BSP_LED_Toggle(LED2);       
               
  }


/* USER CODE BEGIN 4 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  if(huart->Instance == USART1)   //
    {
        HAL_UART_Transmit(&huart1,aRxBuffer1,1,0);   
       HAL_UART_Transmit_IT(&huart1,aRxBuffer1,1);   
}



收藏 评论4 发布时间:2018-8-6 20:39

举报

4个回答
feixiang20 回答时间:2018-8-6 23:58:47
看你的更高级的中断消耗多少时间,还要看你的串口中断是否是接收的最后一个数据。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

dsjsjf 回答时间:2018-8-7 08:49:36
看你的程序,应该只能接收一次

评分

参与人数 1蝴蝶豆 +1 收起 理由
zero99 + 1

查看全部评分

zhao.zhao 回答时间:2018-8-7 09:10:08
extern  uint8_t    COM3_RecData[100];
extern  uint8_t    COM3Buf;
extern  uint16_t  COM3_Point;
// 设定的串口数据接收结束,产生回调函数
void    HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
{   
    if(UartHandle->Instance==USART3)    // for 串口3
    {
        COM3_RecData[COM3_Point] = COM3Buf;  // 保存串口3接收的数据
        COM3_Point++;
        if(COM3_Point >= 100) { COM3_Point = 0; }
        HAL_UART_Receive_IT(&huart3,&COM3Buf,1);  // 接收1个字节 产生中断回调 开启下一次接收中断
    }
}

// 在其他设置串口3,打开串口3中断
...........
// 设置完成后,设置串口3接收数据放在什么位置
HAL_UART_Receive_IT(&huart3,&COM3Buf,1);  //设置 接收到1个字节 ,开启一次接收中断,进入中断回调函数

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

a8707076 回答时间:2018-8-7 10:14:39
~~感謝你的提供,讓我學習要很多,也給我很大的幫助,非常的感謝你的分享。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版