STM32 软件触发ADC采集详解
创作时间:
作者:
@小白创作中心
STM32 软件触发ADC采集详解
引用
CSDN
1.
https://blog.csdn.net/longgyue/article/details/142448117
STM32的ADC(模数转换器)功能是单片机开发中非常重要的一个模块,广泛应用于各种传感器数据采集场景。本文将通过STM32F103C8T6为例,详细介绍如何通过软件触发方式实现ADC数据采集。
0.91寸OLED屏幕大小的音频频谱,炫酷!
STM32的ADC模块功能强大,但相应的配置也较为复杂。对于软件触发ADC方式,其基本流程如下图所示:
最基本的ADC采样方式,不经过外部触发,采样转换完成不触发中断。
接下来,我们将详细讲解ADC的操作步骤,以ADC1的通道0为例。
时钟配置
STM32系列ADC的时钟来源于APB2时钟分频。首先需要将APB2时钟分频到36M,然后将ADC时钟分频到12M。具体配置如下:
void clock_config()
{
RCC->CFGR&=~(1<<14);
RCC->CFGR|=(1<<14);
while(!(RCC->CFGR&(1<<14)));
RCC->CR|=1;
while(!(RCC->CR&1));
RCC->CFGR&=~(1<<14);
}
GPIO初始化
要实现ADC采集功能,需要将对应的GPIO设置成模拟输入模式。这里以PA0为例:
void gpio_init()
{
RCC->APB2ENR|=(1<<2)|(1<<9);//GPIOA时钟使能
GPIOA->CRL&=~(0X0F<<0);//PA0 模拟输入模式
}
ADC模块初始化
ADC模块的初始化相对复杂,需要配置多种寄存器参数。以下是具体的初始化代码:
void adc_init()
{
ADC1->CR2|=(1<<0);
ADC1->CR1&=~(0X0F<<16);//independent mode
//ADC1->CR1&=~(7<<13);//1个通道
//ADC1->CR1|=(1<<11);
ADC1->CR1&=~(1<<8);//扫描模式关闭
ADC1->CR2|=(1<<20);
ADC1->CR2|=(7<<17);
ADC1->CR2&=~(1<<11);//right align
ADC1->CR2|=(1<<3);
while(ADC1->CR2&(1<<3));
ADC1->CR2|=(1<<2);
while(ADC1->CR2&(1<<2));
ADC1->CR2&=~(1<<1);
ADC1->SMPR2&=~(7<<0);
ADC1->SQR3&=~(0X1F<<0);
}
控制ADC采集
最后是控制ADC采集的过程,通过软件触发方式启动ADC转换:
unsigned int start_adc()
{
ADC1->CR2|=(1<<22);//开始转换
while(!(ADC1->SR&(1<<1)));
return(ADC1->DR);
}
显示ADC采集结果
之前介绍过关于OLED的显示功能,这里我们通过OLED将ADC采集到的值显示出来。实际效果如下:
STM32 软件触发ADC采集的实际效果
通过以上步骤,我们就可以实现STM32单片机的软件触发ADC数据采集功能。这个功能在各种传感器数据采集场景中都有广泛的应用,希望本文能帮助读者更好地理解和掌握这一重要功能。
热门推荐
麦吾兰·图拉克:边走边工作的新疆旅游达人
喀什地区招聘会让就业更稳了!
跟着《跑男》打卡南宁夜市:必吃的美食都在这里!
南宁中山路夜市:舌尖上的历史传承
南宁夜生活的双重奏:老友粉与青秀山夜景
自动挡车正确停车流程
自动挡车辆使用技巧:延长寿命,降低故障率
冬季健康守护:全面指南教你预防感冒
风寒感冒症状与治疗
感冒中医怎么治疗
从《大上海1937》到《功夫》:董志华的演艺人生
马岭河峡谷:瀑布成群,峡谷如画,被誉为地球上最美丽的疤痕
莫干山民国别墅探秘:蒋介石旧居揭秘
莫干山自驾游攻略:打卡江南瑶坞搞怪大会!
迷迭香:让你秒变大厨的秘密武器!
青海唐古拉药业推荐:如何正确服用复方塞隆胶囊?
国家药典委推荐:复方塞隆胶囊新标准
迷迭香:冬日里的高雅绿植
迷迭香:不只是调料,还能提升你的健康!
迷迭香精油的功效研究
迷迭香与耶稣的神秘传说:一株植物的宗教传奇
职场达人必修课:如何优雅应对不讲理同事?
秋冬自驾游:成都出发探秘西江千户苗寨
成都出发,打卡西江千户苗寨最佳路线
阿洁带你玩转西江千户苗寨
科举制度的起源与发展——中国古代选官制度的演变历程
《Blowin' In The Wind》:一首改变时代的民权之歌
冬季老是胃胀气怎么办?这些坏习惯要戒掉!
甲午海战120周年:中国海军如何崛起?
四川舰下水:中国海军两栖作战能力实现新突破