OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 28|回复: 0

回顾DMA串口的时候出现的问题,求帮助

[复制链接]

3

主题

5

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2022-3-13
在线时间
12 小时
发表于 前天 22:24 | 显示全部楼层 |阅读模式
本帖最后由 wppaiqiqi 于 2025-8-18 22:39 编辑

最近在研究zephyr的时候,发现使用DMA串口接收数据的时候产生空闲中断,回调函数中通过原串口对数据进行回显,发现回显数据一直为乱码,但是单步调试的时候又是正常的;于是我就想着用HAL库验证一下是不是好的,因为本身逻辑比较简单又加上zephyr操作系统不是很稳定很多功能不够完善。
下面我就开始使用stm32f103zet6(精英开发板)验证。
首先我通过cubemx配置了异步串口usart3 ,并将串口配置为DMA模式,其中DMA模式都是正常模式;
下面我做了两个实验:
1、使用HAL_UART_Receive_DMA和HAL_UART_Transmit_DMA函数进行回显,HAL_UART_Receive_DMA函数接收完成触发HAL_UART_RxCpltCallback;
  1. int main(void)
  2. {  
  3.   HAL_Init();
  4.   SystemClock_Config();
  5.   MX_GPIO_Init();
  6.   MX_DMA_Init();
  7.   MX_USART3_UART_Init();
  8.   HAL_UART_Receive_DMA(&huart3,rx_buf,3);
  9.   while (1)
  10.   {)
  11. }
  12. //回调函数
  13. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  14. {
  15.     if(huart == &huart3)
  16.     {
  17.         HAL_UART_Transmit_DMA(&huart3,rx_buf,3);
  18.         HAL_UART_Receive_DMA(&huart3,rx_buf,3);
  19.     }
  20. }
复制代码
测试结果:我通过上位机向串口发送一次,串口第一次将数据回显的第一帧数据是对的,但后续串口会一直向外发送乱码,就像下面这样:
实验1.png
有点想法:根据自己的推断,串口接收数据产生UART_IT_RXNE,最后在UART_Receive_IT函数中会清除该中断,所以我不发的时候他应该不会进这个中断才对;

2、使用HAL_UARTEx_ReceiveToIdle_DMA和HAL_UART_Transmit_DMA函数进行回显,HAL_UARTEx_ReceiveToIdle_DMA函数接收完成触发HAL_UARTEx_RxEventCallback:
  1. int main(void)
  2. {
  3. HAL_Init();
  4. SystemClock_Config();
  5. MX_GPIO_Init();
  6. MX_DMA_Init();
  7. MX_USART3_UART_Init();
  8. HAL_UARTEx_ReceiveToIdle_DMA(&huart3,rx_buf,sizeof(rx_buf));
  9. while (1)
  10. {)
  11. }
  12. //回调函数
  13. void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
  14. {
  15. if(huart == &huart3)
  16. {
  17. HAL_UART_Transmit_DMA(&huart3,rx_buf,Size);
  18. HAL_UARTEx_ReceiveToIdle_DMA(&huart3,rx_buf,sizeof(rx_buf));
  19. }
  20. }
复制代码
这个测试结果和实验1基本一直,串口一直向外发送数据,如下:
实验2.png
经过两个实验,看着像是没有清什么标志,但又觉得清了,有点搞不懂了,估计zephyr和这个估计是一类问题,有没有大佬帮忙解释下为啥。





正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-20 06:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表