[其他ST产品] 【STM32G4评测+04 单字节接收处理,会偶尔丢失第一个字节】

[复制链接]
685|2
 楼主| caizhiwei 发表于 2021-3-29 22:10 | 显示全部楼层 |阅读模式
实验原理:
uart3 定时发送数据 ,uart4 中断接收,接收到之后,用lpuart打印输出。

1.先看几个关键的初始化:
  1. MX_GPIO_Init();
  2.         MX_I2C1_Init();
  3.         MX_LPUART1_UART_Init();
  4.         MX_UART4_Init();
  5.         MX_USART3_UART_Init();
  6.         MX_TIM3_Init();
  7.         /* USER CODE BEGIN 2 */
  8.         //HAL_TIM_Base_Start_IT(&htim3);

  9.         //HAL_UART_Receive_IT(&huart3,&uart3sv[0],1);
  10.        
  11. <font color="#ff0000">        HAL_UART_Receive_IT(&huart4,uart4buf,1/*sizeof(buf_T)*/); // 必须执行一次,顺带开启中断功能</font>


这里需要初始化一次,否则中断接收无法开启,注释是我自己理解的,不知道是否正确;

2. 再看中断回调函数:
  1. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  2. {
  3. //        if(huart->Instance == USART3)        
  4. //  {
  5. //                uart3buf[0] = uart3sv[0];
  6. //                HAL_UART_Receive_IT(&huart3,&uart3sv[0],1);
  7. //                HAL_UART_Transmit(&hlpuart1,uart3buf,1,0xffff);
  8. //        }
  9.   
  10.   if(huart->Instance == UART4)        
  11.   {                  
  12.                 //HAL_UART_Receive_IT(&huart4,uart4buf,sizeof(uart4buf));
  13.                 //HAL_UART_Transmit(&hlpuart1,uart4buf,strlen((char *)uart4buf),0xffff);
  14.           
  15. <font color="#ff0000">                  HAL_UART_Receive_IT(&huart4,uart4buf,1);
  16.                 HAL_UART_Transmit(&hlpuart1,uart4buf,1,0xffff); </font>
  17.           
  18.             //memset(uart4buf,0,sizeof(uart4buf));
  19.             cnt++;
  20.   }
  21.   
  22.   
  23.   
  24. }
中断里面啥都不做,接收到了一个字节后直接打印输出:
QQ浏览器截图20210329215823.jpg
发现偶尔会丢失一个字节。
一开始,我用sscom,后来换成secureCRT,发现不是pc软件的问题。
难道是hal库的效率太低了?170Mhz的主频的mcu不至于呀?

最后,感谢论坛某个网友提供的工程,刚刚准备@他却找不到名字了。
我在他的工程上进行调试了。



dql2015 发表于 2021-3-30 08:03 来自手机 | 显示全部楼层
不会吧,wm一直用着很稳定
 楼主| caizhiwei 发表于 2021-3-30 14:06 | 显示全部楼层
dql2015 发表于 2021-3-30 08:03
不会吧,wm一直用着很稳定

哈哈,我也不知道怎么回事,打算用LL库了,对HAL库一直很伤心
您需要登录后才可以回帖 登录 | 注册

本版积分规则

100

主题

856

帖子

16

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