前言
用cube生成一个用定时器触发ADC1,ADC2同步采集的程序,单片机选择的是STM32L476RGT6,用定时器2进行ADC采集触发,更改定时器2的定时周期便可以更改ADC的采样周期,ADC1和ADC2使用同步规则模式,并用DMA进行数据的传输。
STM32的ADC采样完成总共需要的时间是
ADC完成采样时间=采样周期+12个转换周期
举个例子,假如ADC的时钟是15MHz,采样周期是3个周期,3个采样周期加上12个转换周期,一共是15个周期,因为时钟是15MHz,所以完成一次ADC转换总共需要的时间就是1us。
STM32L476RGT6的ADC时钟是32MHZ,采样周期最短是2.5个周期,最快完成一次采集的时间大约是0.45us,因此,定时器触发的周期一定要大于这个时长。
参考 STM32参考手册 里面对于ADC同步规则模式的介绍。
Cube生成的过程
时钟源配置
首先时钟源选择 晶体/陶瓷谐振器,
调试方式配置
然后在sys里面选择调试方式为Serial Wire
定时器配置
定时器1选择PWM输出模式,定时器的时钟是80MHz,进行2分频,计数周期是80,生成一个频率是500KHz,占空比为50%的PWM波,用于验证ADC的采样速率。
定时器2的时钟源选择内部时钟,2分频,40计数周期,实现1MHz的ADC触发。Trigger Event Selection TRGO 一定要选择 Update Event ,不然不会触发ADC。
ADC配置
ADC1的通道是12,ADC1和ADC2都有通道打开的情况才会出现双通道的模式选择,如果只有一个独立模式,可以先打开一个ADC2的通道,再来ADC1里面进行模式选择。模式选择双通道同步规则模式,触发源选择定时器2上升沿触发,采样周期是2.5个周期,其余的选项默认设置就行。
ADC2的通道是15,配置默认,ADC2一定要与ADC1的采样周期相同
DMA配置
DMA只需要给ADC1添加一个DMA通道,ADC2不用配置。ADC1添加的DMA模式选择循环传输,数据长度都选择Word。
串口配置
串口选择串口2,配置默认
中断配置
配置完成后的引脚图
时钟树配置
单片机运行的频率是80MHz,ADC采集频率是32MHz。
生成工程代码
上述都配置完成后便可以生成代码啦,
添加程序
main.cl里面需要添加的程序
在初始化完成后,while循环之前添加该段代码,
/* USER CODE BEGIN 2 */
HAL_TIMEx_PWMN_Start(