硬汉嵌入式论坛

 找回密码
 立即注册
查看: 318|回复: 2
收起左侧

[UART] 串口DMA空闲中断首次进入中断接收的数据长度多一个字节

[复制链接]

13

主题

5

回帖

44

积分

新手上路

积分
44
发表于 2025-5-20 17:24:55 | 显示全部楼层 |阅读模式
串口1 DMA空闲中断

配置串口1DMA是Normal模式
main函数中大概如下:

...

/* 开启串口DMA接收 */
HAL_UARTEx_ReceiveToIdle_DMA(&huart1, mhuart1.Rxbuf, UART_RX_SIZE);

....
while(1)
{
...
}
在中断中打印接收到的数据长度和具体数据。情况如下:
比如发送的十六进制是 13个字节
30
3a
53
43
4c
46
30
2c
31
30
30
30
0A
那么接收到的数据情况如下:
接收的数据长度 = 14字节。数据是:
0

30
3a
53
43
4c
46
30
2c
31
30
30
30
0A

问题总结:
1、数据长度多一个字节。
2、多的字节总是第一个字节 = 0,其余字节都是正常。
3、再次发送该13字节后,长度和数据正常,只有第一次不对。
回复

使用道具 举报

4

主题

90

回帖

102

积分

初级会员

积分
102
发表于 2025-5-20 21:39:43 | 显示全部楼层
没有遇到过这种情况,发个配置看看吧。接收长度是通过回调函数的Size获取的吗?检查接收DMA的NDTR计数器,在开启空闲接收后与回调函数内,是否均符合预期。另:个人习惯在HAL_UARTEx_ReceiveToIdle_DMA中将Size配置为UART_RX_SIZE-1,以确保数组以0结尾。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2025-5-21 07:06:19 | 显示全部楼层
测试下,不使用dma和空闲中断,重新上电,也有这个多余的0被接受到
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 03:47 , Processed in 0.039165 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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