【重要】STM32 使用ADC中断(非DMA)读取传感器数据

本文介绍了如何使用STM32F103C8T6开发板通过ADC中断而非DMA方式读取灰度传感器的数据。在CubeMax中配置ADC参数,确保通道不重复且设置合适的采样周期。通过降低STM32主频以提高ADC采样速度,并提供了相关的代码文件(g_sensor.c和g_sensor.h)。在main.c的while循环前进行ADC初始化,在定时器中断中调用G_Sensor_Read()函数实现连续读取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

STM32 使用ADC中断(非DMA)读取传感器数据

这里使用STM32F103C8T6开发板和灰度传感器测试STM32的ADC功能。软件上使用CubeMax快速生成相应代码,在ADC中断中读取传感器数值

灰度传感器

这里使用的是这种灰度传感器,接线简单,除了供电只需要将OUT引脚接到STM32的ADC引脚即可。如果模块的白灯效果不好,还可以把灯拆下来,换成别的LED。

image-20220916191632251

CubeMax ADC配置

image-20220718133346641

Number Of Conversion中,使用了多少路ADC就选择多少

image-20220718133434927

Rank中的Channel不要选重复,周期越长测得越准

image-20220718133527558

时钟树中,如果STM32主频配成了72MHz,那么ADC最快只能有12MHz,但F103C8T6的ADC最高频率为14MHz,想要追求极致的ADC采样速度就要降低STM32的主频在配置ADC分频系数像这样

image-20220718133827683

根据实际情况取舍就好

STM32 代码编写

g_sensor.c

#include "g_sensor.h"

/**********************
 * 7.13基地材料柜左侧地图
 *    g1   g2   g3
 * 白 3500 3720 3610
 * 红 3340 3600 3410
 * **********************/ 

uint16_t g_sensor_value[3] = {
   
   0};//保存灰度传感器读取的模拟值
uint16_t g_sensor_value_new[3] = {
   
   0};//保存灰度传感器读取的模拟值
uint8_t alpha = 0.1;//一阶惯性滤波参数
uint16_t gs_white_standar[3] = {
   
   0};//保存标定白色得到的值
uint16_t gs_red_standar[3] = {
   
   0};//保存标定红色得到的值
uint8_t gs_1_check = 0,gs_2_check = 0,gs_3_check = 0;//保存传感器是否识别到红线

/***********************************
 * 功能:ADC灰度传感器传输初始化
 * 输入:无
 * 返回:无
 * **********************************/
void ADC_Init(void)
{
   
   
    HAL_ADCEx_Calibration_Start(&hadc1);//ADC校准
}

/***********************************
 * 功能:进行一次ADC灰度传感器数值读取
 * 输入:无
 * 返回:无
 * *****************************
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值