STM32第十二天AD转换
来源:互联网 发布:html进销存源码 编辑:程序博客网 时间:2024/06/05 02:59
ADC转换原理 主要分两个 1 并联比较::
2,逐次比较::
在STM32使用ADC转换的是第二种。
根据STM32板子有3快ADC,ADC功能谱图如下
根据上面配置寄存器..写出adc.c的源代码。
#include "adc.h"#include "delay.h" //初始化ADC//这里我们仅以规则通道为例//我们默认仅开启通道1 void Adc_Init(void){ //先初始化IO口 RCC->APB2ENR|=1<<2; //使能PORTA口时钟 GPIOA->CRL&=0XFFFFFF0F;//PA1 anolog输入 //模拟输入,如何配置??、//GPIOA->ODR |=1<<1;// 默认都不使能 RCC->APB2ENR|=1<<9; //ADC1时钟使能 RCC->APB2RSTR|=1<<9; //ADC1复位 ADC1的所有寄存器。。。。。 13类寄存器。RCC->APB2RSTR&=~(1<<9); //复位结束 由软件置0,置1, ,又要,,,//设置时钟周期????????????????????????????????????????看不懂为什么这样设置........... PCLK2???不知道有没有这一步.!!CFGR多位设置。RCC->CFGR&=~(3<<14); //分频因子清零//SYSCLK/DIV2=12M ADC时钟设置为12M,ADC最大时钟不能超过14M!//否则将导致ADC准确度下降! RCC->CFGR|=2<<14; ADC1->CR1&=0XF0FFFF; //工作模式清零 //16:19???、ADC1->CR1|=0<<16; //独立工作模式 --->注入通道和规则通道ADC1->CR1&=~(1<<8); //非扫描模式 --》一次转换一个 ADC1->CR2&=~(1<<1); //单次转换模式 ADC1->CR2&=~(7<<17); //17:19, ADC1->CR2|=7<<17; //软件控制转换 000 ADC1->CR2|=1<<20; //使用用外部触发(SWSTART)!!!必须使用一个事件来触发ADC1->CR2&=~(1<<11); //右对齐 ADC1->SQR1&=~(0XF<<20); //-------------->SQR3第一位ADC1->SQR1|=0<<20; //1个转换在规则序列中 也就是只转换规则序列1 //设置通道1的采样时间ADC1->SMPR2&=~(7<<3); //通道1采样时间清空 ADC1->SMPR2|=7<<3; //通道1 239.5周期,提高采样时间可以提高精确度 +1.5 /12ADC1->CR2|=1<<0; //开启AD转换器,从断电模式唤醒delay_us(10);ADC1->CR2|=1<<3; //使能复位校准(校准值变成默认值) while(ADC1->CR2&1<<3); //等待复位结束 //写的可靠点就超时 //该位由软件设置并由硬件清除。在校准寄存器被初始化后该位将被清除。 ADC1->CR2|=1<<2; //开启AD校准 while(ADC1->CR2&1<<2); //等待校准结束//该位由软件设置以开始校准,并在校准结束时由硬件清除 } //获得ADC值//ch:通道值 0~16//返回值:转换结果u16 Get_Adc(u8 ch) {//设置转换序列 //ADC1->CR2|=1<<0;ADC1->SQR3&=0XFFFFFFE0;//规则序列1 通道chADC1->SQR3|=ch; ADC1->CR2|=1<<22; //启动规则转换通道 while(!(ADC1->SR&1<<1));//等待转换结束 return ADC1->DR;//返回adc值}//获取通道ch的转换值,取times次,然后平均 //ch:通道编号//times:获取次数//返回值:通道ch的times次转换结果平均值u16 Get_Adc_Average(u8 ch,u8 times){u32 temp_val=0;u8 t;for(t=0;t<times;t++){temp_val+=Get_Adc(ch)&0xfff;delay_ms(5);}return temp_val/times;}
0 0
- STM32第十二天AD转换
- STM32中AD转换的校准问题
- stm32 AD模数转换[操作寄存器+库函数]
- 关于STM32内部AD规则转换 开启控制
- STM32的DMA多通道多数据AD转换
- AD 转换
- AD转换
- AD转换
- stm32 AD参考电压
- STM32采集AD电压
- STM32中DMA AD
- 7.AD转换—基于CT117E开发板的STM32库函数编程
- STM32 配置AD,配置DMA
- 第十二天 PHP的数据类型转换
- AD转换 ADC设计
- WINCE60 AD转换函数
- S3C2440 AD转换
- mini2440 ad转换实验
- js实现删除等其他操作弹出的提示框
- Android视图绘制流程完全解析,带你一步步深入了解View(二)
- 为什么飞哥比龙哥聪明比龙哥白,为什么龙哥比黄哥哥白
- 单片机学习之路
- iOS开发UI高级—35核心动画(转场动画和组动画)
- STM32第十二天AD转换
- 自定义View之onMeasure()
- 备忘-Handler
- C#委托的介绍(delegate、Action、Func、predicate)
- iOS开发UI高级—36核心动画(UIView封装动画)
- Android程序出现错误“Field requires API level 5 (current min is 4)”的解决
- LeetCode1:Two Sum
- [费用流] POJ 2195 Going Home
- 关于C++函数思考2(C++函数返回引用和返回非引用的区别)