10.4.2 外设ADC到内存数据传输设计
1.任务要求
利用DMA控制器、ADC和USART设计一个正弦波数据采集器,被测信号的频率最大为5 kHz,幅度为0~3 V。利用外设ADC采集正弦波数据,然后通过DMA将数据传输到内存指定的存储空间,并将采集到的数据通过串口的DMA方式传输到计算机。请完成程序设计,并通过Proteus完成仿真和调试。
2.硬件设计
外设ADC到内存数据传输设计硬件电路如图10.11所示,STM32微控制器的模拟端口PB0外接运算放大器以实现阻抗和增益匹配;通过USART2与外接的串口转USB接口芯片CH340相连,管脚分别是PA2和PA3,CH340再与PC机的USB接口相连,PC机端利用超级终端或串口助手实现数据收发。

图10.11 外设ADC到内存数据传输硬件电路
3.软件设计
(1)ADC采样用TIM3触发方式配置。
ADC的数据采集配置成定时器TIM3周期触发的方式,触发周期为100 kHz,即ADC的采集频率为100 kHz。系统时钟为8 MHz,定时器的分频值配置为8,可计算出计数次数N为10,计算方法如下。
![]()
式中,N为TIM3计数次数。设计TIM3为减计数器,因此初始值为10-1。
在STM32CubeMX中配置TIM3。“Clock Source”选用内部时钟,“Trigger Output(TRGO)Parameters”选用周期更新触发方式。TIM3触发ADC的配置如图10.12所示。
(https://www.daowen.com)
图10.12 TIM3触发ADC的配置
(2)ADC1的DMA配置。
ADC选用ADC1,采用通道8将数据送入ADC,对应PB0接口,用规则方式进行模数转换。ADC的规则通道触发方式配置成“Timer 3 Trigger Out Event”,ADC的其他参数选用默认方式。在“DMA Settings”选项卡中单击“Add”按钮添加ADC1,“Channel”选项选择“DMA1 Channel 1”。ADC1的DMA配置如图10.13所示。

图10.13 ADC1的DMA配置
USART的配置和10.4.1小节一样,然后生成MDK工程文件。在“main.c”文件中添加代码,程序如下。


函数HAL_ADC_Start_DMA(&hadc1,(uint32_t*)adcValue,20)将外设ADC1模块的数据通过DMA通道传输到内存定义的数组adcValue[]中,一次存放20个采样数据。
4.仿真与调试
在Proteus中绘制仿真电路图,用信号发生器产生5 kHz的正弦波,幅度设置为3 V,仿真电路图与调试效果如图10.14所示。ADC采集配置是100 kHz,所以一次ADC采集可以采集20个点。将采集的数据以DMA方式通过串口发送出去。

图10.14 仿真电路图与调试效果