qinlu123 发表于 2025-6-9 09:27

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

假如我把串口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个字节,不是打印到队尾自动从头开始。 ...

好的{:victory:}

ayb_ice 发表于 2025-6-10 08:47

这样会顺着地址往下读

NightfallBallad 发表于 2025-6-16 13:29

6楼说的感觉是靠谱的,可以自己做几个收发小实验看一下就知道了
页: [1]
查看完整版本: 关于STM32串口DMA发送的问题的疑问