这是一个能让你解放双手的ADC采样配置。因为你只需要在程序开始的时候配置好定时器、DMA、ADC,剩下的,就等着采集完成后在中断中处理AD相关数据就行了。 前面也写过STM32的基于DMA的AD转换功能,但不够完善。
STM32的ADC采样功能一直很强大,它又引入了DMA,同时定时器还能做为ADC开始转换的触发源,不得不说,真的好使!当然了,其它家的cotex-m核的MCU也有类似功能,这里只是以ST的芯片为例,做为演示。
本文实现的AD功能为:通过定时器每隔一段时间,自动触发ADC转换,并通过DMA自动把转换后的值存入某变量或数组,存储完成后触发中断。接下来说一下具体的配置和代码,以及调试时的注意事项。
一、创建工程
使用STM32CubeMX创建工程,芯片选择STM32G030F6Px。创建后,使能下载调试接口:SW。
二、时钟树配置
STM32G030系列,在使用内部RC做为时钟源的情况下,最高可以运行在64MHZ。这里,我们选择内部RC做为时钟源,默认16MHZ,然后使用PLL倍频使其达到64MHZ。
三、配置定时器3
如图所示,这里对定时器的时钟源(我们要用64MHZ)做了640分频,分频后频率为100KHZ。计数周期2000,在100KHZ频率下对应20ms。下面的:
Triger Event Selection TRGO :Update Event
表示,每次TIMER3计数溢出更新时,做为一个触发事件。
注意:这里虽然用到了定时器中断,但是TIM3中的NVIC Settings中的中断可以使能,也可以不使能。个人测试,都能实现效果。
四、ADC采样配置
4.1 DMA配置
这里使用ADC1的通道0来采集数据,使能通道0后,先把DMA功能打开。模式为循环,数据宽度为半字:Half Word。其它的,没什么要改的。如下图所