打印
[其他ST产品]

STM32CubeMX配置ADC采样(轮询、中断、DMA)

[复制链接]
1325|76
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
STM32CubeMX能够极大减小STM32外设配置的工作量,因此作者也借助空闲时间对STM32CubeMX相关配置进行了学习,本文介绍如何利用STM32CubeMX配置ADC采样,记录了作者学习过程中遇到的问题及解决办法,使大家少走弯路,并方便以后复习.

1、单通道轮询


使用特权

评论回复
沙发
工程师犹饿死|  楼主 | 2023-4-18 22:48 | 只看该作者
先选择所使用的MCU,这里我使用的是STM32F407ZGT系列

使用特权

评论回复
板凳
工程师犹饿死|  楼主 | 2023-4-18 22:49 | 只看该作者
修改一下DEBUG功能,否则后续无法调试

使用特权

评论回复
地板
工程师犹饿死|  楼主 | 2023-4-18 22:50 | 只看该作者
修改时钟,采用外部晶振

使用特权

评论回复
5
工程师犹饿死|  楼主 | 2023-4-18 22:52 | 只看该作者
配置一串口,用于打印采集的ADC值

使用特权

评论回复
6
工程师犹饿死|  楼主 | 2023-4-18 22:53 | 只看该作者
这里我采用ADC1的通道0,并开启连续采样模式,否则每次开启ADC采样后只进行一次采样

使用特权

评论回复
7
工程师犹饿死|  楼主 | 2023-4-18 22:53 | 只看该作者
开启ADC全局中断(如果只采用轮询采样就不用开启,这里开启是为了方便后面演示中断采样)

使用特权

评论回复
8
工程师犹饿死|  楼主 | 2023-4-18 22:53 | 只看该作者
修改一下ADC全局中断的优先级

使用特权

评论回复
9
工程师犹饿死|  楼主 | 2023-4-18 22:53 | 只看该作者
在HCLK处输入其时钟最高频率168,按回车,其余时钟会自动配置好,一般情况下无需改动

使用特权

评论回复
10
工程师犹饿死|  楼主 | 2023-4-18 22:54 | 只看该作者

使用特权

评论回复
11
工程师犹饿死|  楼主 | 2023-4-18 22:54 | 只看该作者
勾选上后,每个外设会单独保存至一个.c文件,便于查看

使用特权

评论回复
12
工程师犹饿死|  楼主 | 2023-4-18 22:55 | 只看该作者
生成并打开文件




使用特权

评论回复
13
工程师犹饿死|  楼主 | 2023-4-18 22:55 | 只看该作者
在main.h中包含头文件stdio.h

使用特权

评论回复
14
工程师犹饿死|  楼主 | 2023-4-18 22:55 | 只看该作者
在usart.c文件中加入fputc函数,加入后才能使用printf函数进行打印数据

使用特权

评论回复
15
工程师犹饿死|  楼主 | 2023-4-18 22:55 | 只看该作者
在while循环中添加以上代码,由于开启了连续转换模式,即hadc1.Init.ContinuousConvMode = ENABLE;因此每次转换完成后都要调用HAL_ADC_Stop来关闭ADC;如果不想每次都调用该函数来关闭ADC,可以关闭连续转换模式,即hadc1.Init.ContinuousConvMode = DISABLE,这样每次开启ADC转换以后只会进行一次采样,这样就不需要每次都关闭ADC了

使用特权

评论回复
16
工程师犹饿死|  楼主 | 2023-4-18 22:56 | 只看该作者
实验现象如下图:

使用特权

评论回复
17
工程师犹饿死|  楼主 | 2023-4-18 22:56 | 只看该作者
2、单通道中断

单通道中断采样配置过程与单通道轮询采样相同,利用cubemx配置完成后有两种开始ADC采样的方法
方法一:

使用特权

评论回复
18
工程师犹饿死|  楼主 | 2023-4-18 22:56 | 只看该作者
在主函数中加入上述代码,__HAL_ADC_ENABLE_IT(&hadc1,ADC_IT_EOC);用于打开ADC转换完成中断,HAL_ADC_Start(&hadc1);用于开启ADC采样,这两个函数一定要放到外设初始化函数的后面,否则串口函数初始化未完成,在ADC中断中使用printf函数可能会卡死


使用特权

评论回复
19
工程师犹饿死|  楼主 | 2023-4-18 22:57 | 只看该作者
在主函数中加入上述代码,__HAL_ADC_ENABLE_IT(&hadc1,ADC_IT_EOC);用于打开ADC转换完成中断,HAL_ADC_Start(&hadc1);用于开启ADC采样,这两个函数一定要放到外设初始化函数的后面,否则串口函数初始化未完成,在ADC中断中使用printf函数可能会卡死


使用特权

评论回复
20
工程师犹饿死|  楼主 | 2023-4-18 22:57 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

75

主题

886

帖子

0

粉丝