打印
[其他ST产品]

【STM32G4评测+04 单字节接收处理,会偶尔丢失第一个字节】

[复制链接]
572|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
实验原理:
uart3 定时发送数据 ,uart4 中断接收,接收到之后,用lpuart打印输出。

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

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


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

2. 再看中断回调函数:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
//        if(huart->Instance == USART3)        
//  {
//                uart3buf[0] = uart3sv[0];
//                HAL_UART_Receive_IT(&huart3,&uart3sv[0],1);
//                HAL_UART_Transmit(&hlpuart1,uart3buf,1,0xffff);
//        }
  
  if(huart->Instance == UART4)        
  {                  
                //HAL_UART_Receive_IT(&huart4,uart4buf,sizeof(uart4buf));
                //HAL_UART_Transmit(&hlpuart1,uart4buf,strlen((char *)uart4buf),0xffff);
          
<font color="#ff0000">                  HAL_UART_Receive_IT(&huart4,uart4buf,1);
                HAL_UART_Transmit(&hlpuart1,uart4buf,1,0xffff); </font>
          
            //memset(uart4buf,0,sizeof(uart4buf));
            cnt++;
  }
  
  
  
}
中断里面啥都不做,接收到了一个字节后直接打印输出:

发现偶尔会丢失一个字节。
一开始,我用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

主题

857

帖子

14

粉丝