STM 32 使用cube 生成TIM触发ADC并通过DMA传输的问题
这几天在尝试使用freerots,规划了一个电池管理的任务,需要使用TIM触发ADC并通过DMA传输
因为是第一次使用cube和freerots,心里还是不是很有底。
过程基本就是按照百度方式进行配置,进行配置的难度并不大,
问题是出在配置完成之后,直接现象就是ADC没有数据
整体的逻辑就是首先配置TIM和ADC,配置ADC由TIM触发,然后有三个通道扫描,数据发送到内部定义的数组中
经过检查,发现最开始的TIM都没有运行(调试的时候打开TIM3的寄存器看的),后来发现cube生成的代码其实只是配置好了,但是要启动的话还需要用户在用户代码区将他启动起来,像这样
接着改了之后,ADC能正常触发了,但是发现DMA并没有反应,
于是在调试界面打开了DMA的寄存器,发现里面寄存器都是空的。也就是说配置都没有配置。
这个就很奇怪了,因为我是有启动它的语句的
最后发现,原因居然是生成的代码里面,ADC的初始化在DMA初始化之前导致的。。。。。
因为DMA初始化里面是有打开其时钟的,如果ADC在DMA之前配置,DMA的时钟是没有打开的,也就是说ADC初始化的配置是写不进去的。。。。
后来,将这两个初始化的位置换了一下,将DMA放在前面,就能正常收到数据了。