STM32G473CBT6关于ADC采集的总结

STM32G473CBT6单片机在浮点运算,信号采集、数据处理方面有很大的用途。因相关的资料较少,特此做一下笔记,方便后期使用。STM32CubeMX软件比较强大,兼容IAR和keil方便直接生成代码文件,但相关的库不熟悉,好东西用起来较苦恼。

ADC是STM32的一大外设资源,可以方便数据采集。但ADC的调用和ADC采集的方式较多,暂时列出常用的使用方法。

Scan Conversion Mode:ADC的采集通道很多,其支持单通道采集和多通道采集。多通道数据采集时,需要选择此标签为Enable,才能采集扫描其他的数据通道。

Continuous Scan Conversion Mode:ADC采集时如果采集一次就停止,则选择Disable;如果需要周期性的连续的采集数据,则选择Enable。

DMA Continuous Requests:当需要选择DMA进行数据转运时,需要关注此标签,选择Enable,表示DMA通道数据转运完成后,继续请求dma进行数据转运,相当于连续转运。

一、ADC获取数据的方式

ADC完成数据采集后,有两种方式进行获取结果,第一种轮询方式,此原理是ADC采集完成后,MCU查询采集完成状态,之后获取采集结果。此种方式因MCU需要等待采集完成,因此较耗费资源;第二种方式是DMA方式,当ADC采集完成后,DMA处理器将结果转运到内存中,我们直接访问内存即可获取结果,应用较广泛,MCU该干啥干啥,不占用资源。第三种方式是中断,因我不常用就不详述。

二、ADC轮询采样:

       2.1设置时钟,因我的硬件是采用外置8M晶振。因此选择如下:

STM32G473CBT6关于ADC采集的总结_第1张图片

   2.2 选择串口调试模式

STM32G473CBT6关于ADC采集的总结_第2张图片

  2.3 设置系统主频为72M 

STM32G473CBT6关于ADC采集的总结_第3张图片

  2.4 设置ADC输入管脚,本人硬件上是ADCIN4单通道采集,所以选择如下:

        Clock为8分频,因ADC采集最高速率不应超过14M的限制。 

STM32G473CBT6关于ADC采集的总结_第4张图片

   2.5 Rank的采样时间尽可能长些,这样会准一些。本文设置为92.5cycles。 

 STM32G473CBT6关于ADC采集的总结_第5张图片

    2.6 之后即可生成代码。在自己写的代码中调用以下函数可以实现周期性的轮询adc的结果。

STM32G473CBT6关于ADC采集的总结_第6张图片

三、ADC+DMA采样:

       设置时钟等就不在赘述,在此直接上关键设置。

        3.1 DMA的设置,mode 改为circular,可以周期性的循环搬运数据。

STM32G473CBT6关于ADC采集的总结_第7张图片

     3.2 adc的设置 continueous conversion mode 需要改为enable,才能adc连续采集;dma                     continuous requests改为enable,dma才能连续搬运数据。 

STM32G473CBT6关于ADC采集的总结_第8张图片

     3.3 生成代码,程序中增加如下函数即可。 

STM32G473CBT6关于ADC采集的总结_第9张图片

四、ADC+DMA+定时器采样

        设置时钟等就不在赘述,在此直接上关键设置。

        4.1 设置tim3,定时周期为(14400)*50000/72M=10s

STM32G473CBT6关于ADC采集的总结_第10张图片

   4.2 adc触发选择tim3,连续转换模式必须关闭,等待定时器触发 

STM32G473CBT6关于ADC采集的总结_第11张图片

   4.3 生成代码后,主函数中调用如下函数即可 

 STM32G473CBT6关于ADC采集的总结_第12张图片

你可能感兴趣的:(硬件编程,stm32,单片机,嵌入式硬件)