stm32 ADC基础配置
来源:互联网 发布:怎样做淘宝返利群 编辑:程序博客网 时间:2024/05/16 06:01
一,基础知识
1,通道组
ADC有两组通道:STM32 将 ADC 的转换分为 2 个通道组:规则通道组和注入通道组。规则通道相当于你正常运行的程序,而注入通道呢,就相当于中断。在你程序正常执行的时候,中断是可以打断你的执行的。同这个类似,注入通道的转换可以打断规则通道的转换, 在注入通道被转换完成之后,规则通道才得以继续转换。
● 规则组由多达16个转换组成。规则通道和它们的转换顺序在ADC_SQRx寄存器中选择。规
则组中转换的总数应写入ADC_SQR1寄存器的L[3:0]位中。
● 注入组由多达4个转换组成。注入通道和它们的转换顺序在ADC_JSQR寄存器中选择。注入
组里的转换总数目应写入ADC_JSQR寄存器的L[1:0]位中。
*如果ADC_SQRx或ADC_JSQR寄存器在转换期间被更改,当前的转换被清除,一个新的启动脉
冲将发送到ADC以转换新选择的组*。
二,初始化配置
1,基本功能
ADC_InitTypeDef ADC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1 , ENABLE ); //ADC时钟初始化 RCC_ADCCLKConfig(RCC_PCLK2_Div6);//分频因子要确保 ADC1 的时钟( ADCCLK)不要超过 14Mhz。当前72/6=12MHz。 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//GPIO设置为模拟输入模式 GPIO_Init(GPIOA, &GPIO_InitStructure); ADC_DeInit(ADC1); //恢复默认值 ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//双模式选择,注1; ADC_InitStructure.ADC_ScanConvMode = DISABLE;//是否多通道模拟输入,注2; ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//是否是单次转换,注3; ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//外部触发,注4; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //数据对齐方式 ADC_InitStructure.ADC_NbrOfChannel = 1; //规则组通道数,ADC规则序列寄存器 1(ADC_SQR1)的第23:20位:L[3:0]:规则通道序列长度 (Regular channel sequence length); ADC_Init(ADC1, &ADC_InitStructure); // ADC_Cmd(ADC1, ENABLE); //初始化ADC,ADON位置1。只是给ADC上电,转换开始需要按照前面的设置触发。例如软件触发用ADC_SoftwareStartConvCmd(ADC1, ENABLE); ADC_ResetCalibration(ADC1); //复位ADC校准。 while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位完成 ADC_StartCalibration(ADC1); //校准 while(ADC_GetCalibrationStatus(ADC1)); //等待校准完成 ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );//通道配置:注5; ADC_SoftwareStartConvCmd(ADC1, ENABLE);//软件触发所以对SWSTART置位。 while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束 return ADC_GetConversionValue(ADC1);//返回最近一次转换结果
注1:双模式选择 (Dual mode selection)
对应ADC控制寄存器 1(ADC_CR1)中的:DUALMOD[3:0]:双模式选择 (Dual mode selection)
软件使用这些位选择操作模式。
0000:独立模式
0001:混合的同步规则+注入同步模式
0010:混合的同步规则+交替触发模式
0011:混合同步注入+快速交叉模式
0100:混合同步注入+慢速交叉模式
0101:注入同步模式
0110:规则同步模式
0111:快速交叉模式
1000:慢速交叉模式
1001:交替触发模式
*注意:1, 在双ADC模式里,为了在主数据寄存器上读取从转换数据,必须使能DMA位,即使不使用DMA
传输规则通道数据。
2,改变通道的配置会产生一个重新开始的条件,这将导致同步丢失。建议在进行任
何配置改变前关闭双模式。*
注2:扫描模式 (Scan mode)
Specifies whether the conversion is performed in Scan (multichannels) or Single (one channel) mode.This parameter can be set to ENABLE or DISABLE.
ADC控制寄存器 1(ADC_CR1)中的:SCAN:扫描模式 (Scan mode);
注3:连续转换 (Continuous conversion)
Specifies whether the conversion is performed inContinuous or Single mode. This parameter can be set to ENABLE or DISABLE.
ADC控制寄存器 2(ADC_CR2)的CONT:连续转换 (Continuous conversion)
CONT=0,SCAN=0 单次转换模式(Single conversion mode)单次扫描1通道
CONT=1,SCAN=0 连续转换模式(Continuous conversion mode) 连续扫描1通道
CONT=0,SCAN=1 扫描转换模式(Scan mode):所有ADC_SQR序列通道转换一次后停止。(单次扫描组)
CONT=1,SCAN=1 扫描转换模式(Scan mode):所有ADC_SQR序列通道转换一次后,再从第一个通道循环。连续扫描一组
如果开启多个通道不开启扫描模式,则只转换每组通道的第一个通道。
注4:选择启动规则通道组转换的外部事件 (External event select for regular group)
Defines the external trigger used to start the analog to digital conversion of regular channels.
ADC控制寄存器 2(ADC_CR2)的EXTSEL[2:0]:选择启动规则通道组转换的外部事件 (External event select for regular group)这些位选择用于启动规则通道组转换的外部事件,其中111是SWSTART即软件启动。库函数:ADC_SoftwareStartConvCmd(ADC1, ENABLE);
注5:通道配置
void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime)
配置ADCx的,通道,序列,转换时间。其中序列就是第几个被转换的。主要对应两个寄存器:ADC采样时间寄存器 1,2(**ADC_SMPR**1,2)和ADC规则序列寄存器 1,2,3(**ADC_SQR**1,2,3)
- stm32 ADC基础配置
- STM32 ADC配置
- STM32之ADC配置
- STM32的ADC输入通道配置
- STM32的ADC输入通道配置
- stm32 ADC详细配置笔记(1)
- STM32 ADC
- STM32.ADC
- STM32 adc
- STM32---ADC
- STM32 ADC
- STM32->ADC
- 关于STM32中ADC多通道连续采样的配置
- stm32 adc问题
- STM32 ADC调试
- STM32 ADC学习
- STM32之ADC学习
- STM32 DMA USART ADC
- CentOS 安装配置JDK与Tomcat支持jsp文件解析
- 【十月总结】2016.10.31
- hdu 1709 普通母函数
- ocos2d-JS 屏幕适配相关内容
- Hive调优(语法与参数层面优化)
- stm32 ADC基础配置
- 如何查询oracle执行计划_总结
- 北京新闻客户端
- 查询单词在文章中出现的行和行数
- 改变UITextField的光标颜色
- javascript-ui 滑块
- 09-表格标记
- linux c打印进程环境表
- Listview之万能适配器封装,结合上一篇博客ViewHolder封装类使用