STMCubeMX
STMCubeMX是ST为stm32系列mcu开发的图形化配置工具,通过它我们可以快速初始化芯片资源,确实可以为嵌入式软件工程师节省在底层配置上的时间精力,快速进入功能验证。但是我们在使用它的时候需要注意一个bug,防止掉进坑里影响我们宝贵的时间和开发节奏。
DMA
DMA(Direct Memory Access),直接存储器访问,是一种广泛使用的数据传输方式,DMA控制器可自主在存储器和外部设备之间直接进行数据传送,大大节省处理器本身的芯片资源,高速通信时大大提高系统效率和稳定性。
STMCubeMX下uart的dma配置
推荐博文 ----STM32CubeMX教程之串口dma发送接收------
在上述教程中,串口或其他通讯总线和DMA一起配置的时候并不会出现问题,
笔者生成的代码(dma和串口一起配置):
结果(正常通信):
BUG——开始踩坑
在先配置串口或其他通讯总线并生成代码后,如果我们需要用到dma了,再次操作stm32cubemx工程配置dma将会产生此BUG:生成的代码dma初始化函数在通讯总线初始化后,导致dma无法使用。
第一次配置(无dma)
第二次配置(增加dma配置)
我们可以发现因为代码生成的先后机制,dma初始化在串口初始化后
测试结果:
无法正常通信
改正方式:只需将dma初始化函数放在串口初始化函数之前即可。
原因:
dma初始化函数在后时,前面串口初始化里进行dma相关配置时还未开dma时钟,所以配置无效。
注:笔者使用的stm32cubemx版本: