stm32中ADC初始化程序

ADC是英文“Analog-to-digitalconverter”的简写,是指模拟数字转换器,是用于将模拟形式的连续信号转换为数字形式的离散信号的一类设备

void Adc_Init(void)
{
uint32_t tmpreg1 = 0;
ADC_InitTypeDef ADC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC |RCC_APB2Periph_ADC1 , ENABLE ); //使能ADC1通道时钟


RCC_ADCCLKConfig(RCC_PCLK2_Div6); //设置ADC分频因子6 72M/6=12,ADC最大时钟不能超过14M

/* PC0 作为模拟通道输入引脚 ->ADC_IN10 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入引脚
GPIO_Init(GPIOC, &GPIO_InitStructure);

/* ADC初始化*/
//CR1寄存器设置
tmpreg1 = ADC1->CR1;
tmpreg1 &= 0xfff0feff; //adc的DUALMOD和SCAN位清零
tmpreg1 |= ((uint32_t)0x00000000); //位19:16 0000:独立模式
tmpreg1 |= ((uint32_t)0x00000000); //扫描模式设置
ADC1->CR1 = tmpreg1;

//CR2寄存器设置
tmpreg1 = ADC1->CR2;
tmpreg1 &= 0xfff1f7fd; //CONT、EXTSEL[2:0]清零
tmpreg1 |= (1<<20); //使用外部事件启动转换
tmpreg1 |= ((uint32_t)0x000E0000); //外部事件设置为软件触发
tmpreg1 |= ((uint32_t)0x00000000); //数据右对齐
tmpreg1 &= ~(1<<1); //单次转换模式
ADC1->CR2 = tmpreg1;

//规则通道数量设置 1个
tmpreg1 = ADC1->SQR1;
tmpreg1 &= 0xff0fffff;
tmpreg1 |= 0x00000000; //位19~位23 0000 代表规则转换组中只有一个通道
ADC1->SQR1 = tmpreg1;

//规则通道转换顺序 转换AD通道10
tmpreg1 = ADC1->SQR3;
tmpreg1 &= 0xffffffe0;
tmpreg1 |= 0x0000000a;
ADC1->SQR3 = tmpreg1;

//采样时间设置
ADC1->SMPR1 &= ~(7<<0); //通道10采样时间设置,239.5周期,提高采样时间可以提高精确度
ADC1->SMPR1 |= 7<<0;

//开启AD

ADC1->CR2 |= (1<<0); //开AD转换器

//AD校准

ADC1->CR2 |= (1<<3); //复位校准
while( ADC1->CR2 & (1<<3) );
ADC1->CR2 |= (1<<2); //AD校准
while( ADC1->CR2 & (1<<2) );

}

自己以前都是库函数操作,没有独立对着参考手册在寄存器层面上编写代码。所以自己写的很艰难,中间还是参考了封装的库函数的定义。现在还只能写的代码还只是一个通道可以转换,多开了几个通道设置还是有问题。明日再继续。

自己独立写代码和做代码搬运工区别真的很大,虽然过程艰难,但是只要能做好,还是能学到很多东西。对概念的理解也会更深。


比如自己对 ! 和 ~的理解不到位。就想当然的写出了下面的程序


//等待AD转换结束

while( !(ADC1->SR) & (1<<1) );
而这种显然更合理 while(!(ADC1->SR&1<<1));

若自己只是做代码搬运工,不独立写,就不会发现概念上的误区,看书的时候也不会有那么深的体会。

所以我希望自己能够在学习的时候能够更独立。
————————————————
版权声明:本文为CSDN博主「ES丶行者」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xxz1014/article/details/40404779

posted on   lydstory  阅读(1203)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤
历史上的今天:
2021-01-16 http://fuzzing.org/
2021-01-16 find安全
2021-01-16 这是什么大拿,编程语言选择
2021-01-16 web浏览器模糊器
2021-01-16 web应用模糊器
2021-01-16 网络协议模糊器
2021-01-16 文件格式模糊器

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

统计

点击右上角即可分享
微信分享提示