使用GD32F4替换STM32F4,理论上大部分代码都可以兼容,测试串口DMA+空闲中断接收时发现DMA无法收到数据,DMA计数器没有增加,通过对比运行状态时的DMA寄存器状态,观察到GD32的DMA的地址自动增加和循环模式没有被正确置位。
检查代码发现CubeMX生成的代码在设置串口DMA接收之前没有使能DMA,在初始化之前,先使能DMA的RCC时钟后即可正常使用。
STM32可以在未初始化外设模块时钟时,修改其寄存器设置,GD32则必须要先使能外设时钟后才能设置对应的控制寄存器值。
本文介绍使用GD32F4替换STM32F4过程中遇到的串口DMA+空闲中断接收问题。GD32F4在未使能DMA时钟的情况下无法正常工作,而STM32F4则不受此限制。通过对比DMA寄存器状态发现GD32F4的地址自动增加和循环模式未能正确配置。
使用GD32F4替换STM32F4,理论上大部分代码都可以兼容,测试串口DMA+空闲中断接收时发现DMA无法收到数据,DMA计数器没有增加,通过对比运行状态时的DMA寄存器状态,观察到GD32的DMA的地址自动增加和循环模式没有被正确置位。
检查代码发现CubeMX生成的代码在设置串口DMA接收之前没有使能DMA,在初始化之前,先使能DMA的RCC时钟后即可正常使用。
STM32可以在未初始化外设模块时钟时,修改其寄存器设置,GD32则必须要先使能外设时钟后才能设置对应的控制寄存器值。
376

被折叠的 条评论
为什么被折叠?