写点什么

STM32-ADC 简单学习笔记

用户头像
 
关注
发布于: 2020 年 08 月 19 日

ADC介绍

​ 12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。 模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。ADC的输入时钟不得超过14MHz,它是由PCLK2经分频产生的。

程序配置实例

ADC初始化

/*
*ADC_InitTypeDef 结构体成员描述
*ADC_ContinuousConvMode:是否开启连续转换模式
*ADC_DataAlign:数据对齐方式,一般选择右对齐
*ADC_ExternalTrigConv:外部触发转换,若选择ADC_ExternalTrigConv_None则使用软件触发
*ADC_Mode:ADC模式
*ADC_NbrOfChannel:需要转换的通道数量
*ADC_ScanConvMode:是否开启扫描模式
*/
void ADC1_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1, ENABLE);
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStruct);
ADC_DeInit(ADC1);
ADC_InitTypeDef ADC_InitStruct;
ADC_InitStruct.ADC_ContinuousConvMode = DISABLE;
ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStruct.ADC_Mode = ADC_Mode_Independent;
ADC_InitStruct.ADC_NbrOfChannel = 1;
ADC_InitStruct.ADC_ScanConvMode = DISABLE;
ADC_Init(ADC1, &ADC_InitStruct);
ADC_Cmd(ADC1, ENABLE);
ADC_ResetCalibration(ADC1); //重置ADC校准
while(ADC_GetResetCalibrationStatus(ADC1)); //等待重置成功
ADC_StartCalibration(ADC1); //开始ADC校准
while(ADC_GetCalibrationStatus(ADC1)); //等待ADC校准成功
}



获取转换后的值

uint16_t ADC1_GetValue(uint8_t ADC_Channel)
{
/*ADC规则通道配置(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime)
*Rank:转换顺序 即第几个转换
*ADC_SampleTime:采样时间*/
ADC_RegularChannelConfig(ADC1, ADC_Channel, 1, ADC_SampleTime_239Cycles5);
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
return ADC_GetConversionValue(ADC1);
}



连续转换与扫描模式

ADC1配置了规则通道Channel1Channel2Channel3,设置连续转换和扫描模式时会有以下4种情况:

  • 关闭扫描模式、关闭连续转换模式:触发ADC1Channel1开始转换,Channel1转换完成后结束转换,再次触发ADC1才会开始转换。

  • 关闭扫描模式、开启连续转换模式:触发ADC1Channel1开始转换,Channel1转换完成后无需再次触发ADC1,自动开始Channel1的下一次转换。

  • 开启扫描模式、关闭连续转换模式:触发ADC1Channel1开始转换,Channel1转换完成后Channel2开始转换,Channel2转换完成后Channel3开始转换,Channel3转换完成后结束转换,再次触发ADC1才会开始转换。

  • 开启扫描模式、开启连续转换模式:触发ADC1Channel1开始转换,Channel1转换完成后Channel2开始转换,Channel2转换完成后Channel3开始转换,Channel3转换完成后无需再次触发ADC1,自动从Channel1开始下一轮转换。

用户头像

 

关注

还未添加个人签名 2020.08.14 加入

还未添加个人简介

评论

发布
暂无评论
STM32-ADC简单学习笔记