STM32之LL库版TIM+DMA+ADC实现信号采集(二)

STM32之LL库版TIM+DMA+ADC实现信号采集(二)

STM32CUBEMX创建工程

STM32CubeMax是一个很好的工具,它可以生成HAL库或者LL库,由于HAL库太慢了,特别是是在某些需要实时性比较高的地方,因此这里使用LL库。
打开cubemax,直接选择我们的开发板,这里选择开发板的原因是可以利用串口来进行debug,自己从芯片开始创建工程也是可以的,只不过过程稍微复杂一点。
首先打开STM32CUBEMAX
STM32之LL库版TIM+DMA+ADC实现信号采集(二)选择的开发板是STM32F767那款,如果是其他种类的MCU,其实从一定程度上来讲都是差不多的。
STM32之LL库版TIM+DMA+ADC实现信号采集(二)STM32之LL库版TIM+DMA+ADC实现信号采集(二)
这里用不上USBOTG和ETH,我们把它取消掉,如果是用其他的开发板就直接跳过这里。
STM32之LL库版TIM+DMA+ADC实现信号采集(二)STM32之LL库版TIM+DMA+ADC实现信号采集(二)其他的GPIO就懒得管他了。

配置ADC、TIM定时器

首先配置的是ADC,我们这里使用ADC1,配置的是IN4。
STM32之LL库版TIM+DMA+ADC实现信号采集(二)将ADC配置为12位模式,对于触发我们前面已经介绍过了,我们的配置如下
STM32之LL库版TIM+DMA+ADC实现信号采集(二)边沿选择上升沿。
STM32之LL库版TIM+DMA+ADC实现信号采集(二)接下来配置DMA,切换ADC的功能到DMA部分,添加一个DMA通道。
STM32之LL库版TIM+DMA+ADC实现信号采集(二)STM32之LL库版TIM+DMA+ADC实现信号采集(二)配置DMA位循环模式,字宽为word,其实配置为half word也是可以的。
STM32之LL库版TIM+DMA+ADC实现信号采集(二)上面已经完成了对DMA和ADC的配置,在这里可以发现stm32cubemax确实是一款很好用的软件。下面我们开始配置TIM定时器。
TIM定时器选用定时器2,配置slave 模式为gate,触发源选择ITR0,时钟源选择internal clock,其他的默认就可以了。

STM32之LL库版TIM+DMA+ADC实现信号采集(二)由于我们的TIM2定时器是挂在APB1总线上的,如下图

STM32之LL库版TIM+DMA+ADC实现信号采集(二)我们的采样率假设是1kHz,因此进行预分频,设置prescaler为96,这样计数器的计数频率就为1MHz了。计数器的预装载值为1000,然后自动重装,触发事件使用更新事件即可。

STM32之LL库版TIM+DMA+ADC实现信号采集(二)最后配置我们的中断向量分组,把ADC和DMA的中断选上,TIM的中断就不用理他了。但是要注意的是DMA的抢占优先级要低于ADC的抢占优先级,因此DMA的搬移是由ADC发起号令的,而ADC又是受TIM的指挥。

STM32之LL库版TIM+DMA+ADC实现信号采集(二)最后配置工程,选择LL库输出。
STM32之LL库版TIM+DMA+ADC实现信号采集(二)STM32之LL库版TIM+DMA+ADC实现信号采集(二)STM32之LL库版TIM+DMA+ADC实现信号采集(二)

总结

在STM32Cubemax的配置差不多就是这个样子,下面就是修改工程的代码了,因为自动生成的代码有一些地方有bug,因此下面又分了一节将怎么改代码。