STM32Cube教程系列 - ADCDMA篇

一、为什么要出这个教程?

之所以想着出这么一个教程,是希望帮助那些初学嵌入式同时又是以ST的硬件进行学习的小伙伴。大佬们直接忽视就好。因为最近身边老是有人问我Cube中这个该怎么选啊,那里又该怎么点,没办法公司嵌入式人员太少,好多没学过编程的为了维护老产品也*加入了写代码的行列。我们废话不多说直接开始。

二、配置方法

1.Cube配置ADC部分

第一步首先肯定是要打开Cube,选择自己的芯片型号,配置好RCC等内容,这里不在详细说明。做好准备工作后,找到ADC的配置界面,如下图所示:(我这里是以STM32F030C8Tx进行示范)

STM32Cube教程系列 - ADCDMA篇
很多初学的小伙伴看到这个参数设置界面后会很懵,因为参数太多了,好多都不知道该怎么配置,根据图中我给出的标注可以看出来,如果没有其它特殊需求,这个参数配置我们可以选这保持默认。当然我这里的话是修改了采样的时间。到这里ADC就算配置好了下一步则是配置DMA,其实DMA更简单。

2.Cube配置DMA部分

DMA配置按照图示顺序操作即可,如下图:

STM32Cube教程系列 - ADCDMA篇
这里主要说一下第四步的 “Data Width”的参数选择,其实很简单,只要保证该参数的字节大小高于ADC有效位数即可。到这里ADC-MDA的配置我们已经完成了,接下来配置好时钟大小,选择代码的生成路径即可。

3.代码内容添加

配置好后,代码中我们应该怎么做呢?这个时候我们就要去了解ADC的工作流程了,正常工作流程分三个阶段1、启动ADC,2、等待其转化完成,3、读取数据。因为我们使用了DMA所以我们就不用刻意去关注它什么时候转化完成了。
按照上述其思路进行代码补充,首先是启动ADC,这就要借助外设库的函数进行操作了,可以参考下图:

STM32Cube教程系列 - ADCDMA篇
按照图中方法我门可以找到三种启动函数,1、正常启动 2、以中断的形式进行 3、以DMA的形式进行启动。所以选择哪一种我就不用多说了吧。
接下来是数据的获取,当你找到启动函数以后你就会发现如何获取数据你也知道了。

最终我测试版的代码如下仅供参考:

STM32Cube教程系列 - ADCDMA篇
细心的小伙伴可能发现了,我在开始之前还有一个函数,那么它是干什么的呢,答案就是自 校 准 !!!

总结

通过以上操作你会发现,其实Cube的使用并没有那么难,使用起来很困难的原因在于我们对外设的了解情况,只要能知道这个参数对外设来说有什么作用,我们使用起来就会非常简单。当然这也是需要学习和积累的,另外建议各位小伙伴多看看芯片的Datasheet。