STM32第十二天AD转换
2015-06-07 16:43
316 查看
ADC转换原理 主要分两个 1 并联比较::
2,逐次比较::
在STM32使用ADC转换的是第二种。
根据STM32板子有3快ADC,ADC功能谱图如下
根据上面配置寄存器..写出adc.c的源代码。
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 /12 ADC1->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 通道ch ADC1->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; }
相关文章推荐
- 自定义View之onMeasure()
- Android视图绘制流程完全解析,带你一步步深入了解View(二)
- 单片机学习之路
- cf#306D. Regular Bridge(图论,构图)
- Nginx整合PHP原理
- iOS开发UI高级—33核心动画(基础动画)
- WinXP系统鼠标驱动出现问题导致点击无反应怎么办?
- iOS开发UI高级—34核心动画(关键帧动画)
- activiti学习(三)
- Activity四种状态
- iOS开发UI高级—32核心动画简介
- 每次打开Microsoft office word2010时都要显示安装配置文件的问题
- 二叉查找树
- 后端设计中特殊单元
- 四个机器学习一步一步入门约束波尔兹曼机RBM
- iOS开发UI高级—31CAlayer(自定义layer)
- mysql使用笔记
- Code:Blocks 中文乱码问题原因分析和解决方法!
- 笔记本用过外接键盘后原机键盘错乱
- Light 1024 - Eid (高精度)