关于STM32串口DMA发送的问题的疑问

[复制链接]
4909|9
 楼主| qinlu123 发表于 2025-6-9 09:27 | 显示全部楼层 |阅读模式
假如我把串口DMA设置为NORMAL模式,当我调用下面这个函数时,如果传入的Size大于pData的大小,那么串口打到pData最后一个字节后是拐弯从头开始还是打到缓冲区外边。
HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size)


爱情海玩偶 发表于 2025-6-9 10:59 | 显示全部楼层
这个好像跟你的配置有关
dffzh 发表于 2025-6-9 11:28 | 显示全部楼层
DMA配置为Normal模式时,DMA会继续从内存中读取数据,而不会自动拐弯从头开始吧;
这种操作可能会导致内存越界访问?所以如果需要这种方法,最好是在应用层对入参Size做个边界检查,防止超过pData的长度。
 楼主| qinlu123 发表于 2025-6-9 14:59 | 显示全部楼层
dffzh 发表于 2025-6-9 11:28
DMA配置为Normal模式时,DMA会继续从内存中读取数据,而不会自动拐弯从头开始吧;
这种操作可能会导致内存 ...

研究了一下,无论哪种模式都不会自动拐弯从头开始,需要自己做逻辑
dffzh 发表于 2025-6-9 15:07 | 显示全部楼层
qinlu123 发表于 2025-6-9 14:59
研究了一下,无论哪种模式都不会自动拐弯从头开始,需要自己做逻辑

循环模式也不行吗?研究很深入嘛,可以的。
 楼主| qinlu123 发表于 2025-6-9 18:44 | 显示全部楼层
dffzh 发表于 2025-6-9 15:07
循环模式也不行吗?研究很深入嘛,可以的。

循环模式是不停地从起始地址打印size个字节,不是打印到队尾自动从头开始。
zjsx8192 发表于 2025-6-10 08:07 | 显示全部楼层
要自己处理逻辑吧
dffzh 发表于 2025-6-10 08:44 | 显示全部楼层
qinlu123 发表于 2025-6-9 18:44
循环模式是不停地从起始地址打印size个字节,不是打印到队尾自动从头开始。 ...

好的
ayb_ice 发表于 2025-6-10 08:47 | 显示全部楼层
这样会顺着地址往下读
NightfallBallad 发表于 2025-6-16 13:29 | 显示全部楼层
6楼说的感觉是靠谱的,可以自己做几个收发小实验看一下就知道了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

199

主题

2209

帖子

14

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