RTT下,串口DMA没反应
使用了RTT STUDIO,参考了官网rtt官方的DMA的例程,没有接受的处理。但是参考了RTT的中断又没有问题。
已经在board.h里,设置好了,同时在setting里也开启了DMA
#define BSP_USING_UART2
#define BSP_UART2_TX_PIN "PA2"
#define BSP_UART2_RX_PIN "PA3"
#define BSP_UART2_RX_USING_DMA
之前是使用STM32L435 DMA 串口开发的,业务扩展,AT32F435有8个串口准备移植到AT32来。
发现at32用RTT官方的驱动DMA,不起作用。 STM32L4系列的串口DMA是直接挂在DMA1七个通道里面的channel6和channel 7上,而AT32F32跟STM32 DMA的机制有些区别,AT32的DMA还有个复用器,所以可能要修改RTT DMA的BSP。
本帖最后由 sheltonyu 于 2025-3-31 10:02 编辑
你好,有以下几点请注意一下:
1. 是某个串口的dma不能用还是所有串口dma都无法使用?
dma外设通道设置默认进行了排布,外设间可能存在互斥导致没有实际开启,详见dma_config.h文件
2. debug确认一下setting里的串口dma支持是否有正确打开。
打开后会生成RT_SERIAL_USING_DMA宏定义。
3. 如何判断的dma没起作用?
串口接收是按loop buffer的方式不停的接收数据,收到数据时dma就自动进行收数据。4. 要以DMA的方式打开串口设备。
代码贴一下,好分析 串口通信依赖于时钟信号,若晶振不起振或频率不准确,会影响串口和 DMA 的工作 串口和 DMA 的引脚连接要正确。比如,串口的 TX、RX 引脚要和对应的 MCU 引脚连接好,DMA 通道的选择要和硬件设计一致。要检查引脚是否有松动、短路等情况。 DMA传输地址越界或数据长度配置错误。 使用示波器或逻辑分析仪检查USART/DMA引脚信号是否正常。 DMA传输完成后的回调函数已被正确注册并实现。 确保 DMA 传输的源地址和目标地址正确。在 RTT 中,要注意缓冲区的地址是否为物理地址。 RTT未正确绑定到UART外设或传输速率不匹配。 关闭DMA,改用轮询模式发送数据 串口线接触不良或电平不兼容。 DMA外设和UART外设的时钟已开启。
可以使用示波器观察晶振引脚的波形,判断晶振是否正常工作。 确保 DMA 传输的缓冲区大小足够。如果缓冲区过小,可能会导致数据丢失或传输不完整。 检查串口的TX、RX引脚是否正确连接。 监控UART的TX/RX引脚信号,确认数据是否按预期发送。 驱动未正确实现DMA接收回调或缓存机制,导致数据丢失
页:
[1]