10.4.2 外设ADC到内存数据传输设计

更新于 2026年10月10日 版权声明
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 仿真电路图与调试效果

↑上一章 ↓下一章
关注公众号获取验证码
复制内容需要验证码(7.99元/天)