STM32CUBEMX配置教程(十一)STM32的ADC轮询模式扫描多个通道

news/2025/1/12 3:50:09/

STM32CUBEMX配置教程(十一)STM32的ADC轮询模式扫描多个通道

基于STM32H743VI
使用STM32CUBEMX两年了,始终觉得这个工具非常的方便,但因为不是经常使用,导致有些要点总是会有些遗忘,因此写下这一系列教程以供记忆,顺便让我这个大萌新给广大小萌新提供一些学习帮助。

本次配置的工程链接在最下方,有需要自取。
0基础可以从第一个教程开始阅读
STM32CUBEMX配置教程(一)基础配置
STM32CUBEMX配置教程(二)时钟等内部参数配置
STM32CUBEMX配置教程(三)通用GPIO配置
STM32CUBEMX配置教程(四)定时器中断配置
STM32CUBEMX配置教程(五)高级定时器输出两路PWM波
STM32CUBEMX配置教程(六)高级定时器单通道输出互补PWM波(带死区和刹车)
STM32CUBEMX配置教程(七)定时器DMA产生占空比可调方波
STM32CUBEMX配置教程(八)STM32串口轮询发送中断接收+重定义+优化
STM32CUBEMX配置教程(九)STM32串口DMA收发数据
STM32CUBEMX配置教程(十)STM32的ADC读取内部温度传感器

1 新建工程

参考STM32CUBEMX配置教程(一)基础配置

2 修改时钟树

参考STM32CUBEMX配置教程(二)时钟等内部参数配置

3 ADC配置

此处以配置ADC1为例,此处在左侧选项中选中ADC,并在中间上方配置处打开ADC1的3、4、5三个ADC通道。(一般单个通道有三个选项,分别为关闭、单端模式、差分模式,此处设置单端输入即可)

注意:(如果配置时出现时钟报错参考STM32CUBEMX配置教程(十)STM32的ADC读取内部温度传感器里面的解决方法)
在这里插入图片描述
此时还需手动调整通道数为3,因为我们最初开启了三个通道,如下所示:
在这里插入图片描述
下一步需要手动修改Rank,修改三个rank对应三个通道,也就是Channel3、Channel4、Channel5,如下所示:
在这里插入图片描述
注意,当打开多个通道时,此处的扫描模式会自动使能:
在这里插入图片描述
此外,当使用轮询模式时,必须打开间断转换模式,否则转换数据可能会出错!!!至于连续扫描模式在此无需开启。
在这里插入图片描述
到此配置完成,生成工程。

4 代码修改与使用

1.多通道扫描方式(连续读取多个通道):

int main(void)
{SCB_EnableICache();SCB_EnableDCache();HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_ADC1_Init();HAL_ADCEx_Calibration_Start(&hadc1,ADC_CALIB_OFFSET,ADC_SINGLE_ENDED); //ADC校准unsigned char i;while (1){for(i=0;i<3;i++){HAL_ADC_Start(&hadc1);	//启动ADC转换HAL_ADC_PollForConversion(&hadc1,10);	//等待转换完成,10ms表示超时时间ADC_Value[i] = HAL_ADC_GetValue(&hadc1);	//读取ADC转换数据(16位数据)}HAL_Delay(500);}
}

此时三个通道中的数值会存入ADC_Value数组之中,其中数组的0-2个值对应ADC通道3-5的数值。
在这里插入图片描述
2.多通道打开,但是只读取单个通道:
上述读取方式比较麻烦,一次必须读取三个通道的数值,在此封装一个函数,可以只读取单个通道,这样的话读取时会比较灵活。

//获得ADC值
//ch: 通道值 0~16,取值范围为:ADC_CHANNEL_0~ADC_CHANNEL_16
//返回值:转换结果
unsigned short Get_Adc(ADC_HandleTypeDef *ADC_Handler,unsigned int ch)   
{ADC_ChannelConfTypeDef sConfig = {0};sConfig.Channel = ADC_CHANNEL_3;sConfig.Rank = ADC_REGULAR_RANK_1;sConfig.SamplingTime = ADC_SAMPLETIME_810CYCLES_5;sConfig.SingleDiff = ADC_SINGLE_ENDED;sConfig.OffsetNumber = ADC_OFFSET_NONE;sConfig.Offset = 0;sConfig.OffsetSignedSaturation = DISABLE;if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK){Error_Handler();}HAL_ADC_Start(ADC_Handler);                               //开启ADCHAL_ADC_PollForConversion(ADC_Handler,10);                //轮询转换return (unsigned short)

此时自然读取更加灵活:

int main(void)
{SCB_EnableICache();SCB_EnableDCache();HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_ADC1_Init();HAL_ADCEx_Calibration_Start(&hadc1,ADC_CALIB_OFFSET,ADC_SINGLE_ENDED); //ADC校准unsigned char i;while (1){ADC_Value[0]=Get_Adc(&hadc1,3);ADC_Value[1]=Get_Adc(&hadc1,4);ADC_Value[2]=Get_Adc(&hadc1,5);HAL_Delay(500);}
}

工程链接如下:

https://download.csdn.net/download/weixin_44584198/20814491


http://www.ppmy.cn/news/724284.html

相关文章

stm32用tft-lcd 显示自定义大小的字体

笔者用的开发环境是正点原子的stm32 mini 版本&#xff0c;其中需要用到lcd显示中文&#xff0c;正点原子的例程上的字体显示得太小了&#xff0c;于是自己根据例程来写一个可以显示大点字体的函数。 1、首先打开取模软件pctolcd2002,选好字体并做相应设置&#xff0c;笔者想显…

广州大彩串口屏与STM32F407通讯

目录 广州大彩串口屏与STM32F407通讯一、大彩串口屏介绍二、硬件连接三、程序移植四、触摸屏组态及函数调用五、最终效果结语 广州大彩串口屏与STM32F407通讯 之前一直用正点原子的LCD屏&#xff0c;但是占用太多GPIO引脚&#xff0c;所以打算换一块串口屏&#xff0c;某宝上看…

STM32-GPIO介绍

目录 1.概述 2.GPIO工作原理 2.1 保护二极管及上下拉电阻 2.2 GPIO工作模式 2.2.1 浮空输入模式 2.2.2 上拉输入模式 2.2.3 下拉输入模式 2.2.4 模拟输入模式 2.2.5 开漏输出模式 2.2.6 开漏复用输出模式 2.2.7 推挽输出模式 2.2.8 推挽复用输出模式 2.3 注意事项 …

stm32的DMA+ADC多通道数据采集

1前言 硬件&#xff1a;stm32f103rct6&#xff0c;输入大容量产品。 软件&#xff1a;keil MDK5.0 固件库&#xff1a;stm32f1标准外设库。 调试软件&#xff1a;友善串口助手 stm32有多达16个通道&#xff0c;常用的采样方法有两种&#xff0c;一是分时采集每个通道的数据&am…

STM32F407多路串口通信进行数据收发

一直被说是就不能把几个串口放在一起&#xff0c;写个标准例程直接用&#xff0c;非要每次用哪个串口才现场改程序&#xff0c;被迫把usart1,usart2,usart3进行了资源整合&#xff0c;挂在这以备不时之需。 功能简述&#xff1a; 串口1&#xff0c;串口2&#xff0c;串口3串口…

乐鑫Esp32学习之旅 20 一篇好文,开发过程中编译esp32固件太大,无法正常启动?教你如何自定义分区表partitions.csv。

本系列博客学习由非官方人员 半颗心脏 潜心所力所写&#xff0c;仅仅做个人技术交流分享&#xff0c;不做任何商业用途。如有不对之处&#xff0c;请留言&#xff0c;本人及时更改。 1、 爬坑学习新旅程&#xff0c;虚拟机搭建esp32开发环境&#xff0c;打印 “Hellow World”。…

stm32F103C8T6基于FreeRTOS操作系统的多任务

目录 一、FreeRTOS简介1.什么是FreeRTOS?2. FreeRTOS特点 二、创建项目三、编写代码四、编译烧录五、总结参考链接 一、FreeRTOS简介 1.什么是FreeRTOS? 我们看一下FreeRTOS的名字&#xff0c;可以分为两部分:Free和 RTOS&#xff0c;Free 就是免费的、自由的、不受约束的意…

深入理解STM32内存管理

参考&#xff1a;详解ROM和RAM 作者&#xff1a;嵌入式实验楼 网址&#xff1a;https://mp.weixin.qq.com/s/y2aG7kX-6CTyeMzEJW_YHw 内存相关博文&#xff1a; 1、内存四区&#xff08;代码区 静态区 栈区 堆区&#xff09; 2、程序运行时对应的内存分布&#xff08;BSS段、数…