STM32-ADC 03
ADC简介
ADC前置
-
模拟与数字: ADC输入电压范围:0~3.3v 12位ADC输出数字范围:0~4095
ADC定义: 将引脚上连续变化的模拟电压,转换为内存中存储的数字变量
ADC:
-
stm32f103c8t6资源: ADC1 ADC2 每个ADC有很多个通道
-
工作模式: 12位逐次逼近型ADC
-
分辨率 Vref / 2的adc位数次方
-
ADC通道: 规则组:16个ADC转换通道,但规则通道数据寄存器只能存放1个转换结果 配合DMA 注入组:4个ADC转换通道,有4个注入通道数据寄存器能存放4个转换结果
-
ADC模式: 单次转换 连续转换 扫描 非扫描
-
ADC转换触发: 软件:ADC_SoftwareStartConvCmd(ADC1, ENABLE); 硬件:定时器更新事件TRGO,触发ADC转换,节省中断资源 注意 软件触发,配置:ADC_ContinuousConvMode = DISABLE;则每进行一次ADC转换都得调用一次,ADC_SoftwareStartConvCmd(ADC1, ENABLE);
-
AD转换过程: 采样保持 量化编码 注意 采样保持是把待测量的电压值记录下来
-
12位AD转换时间: ADC周期:1/14MHZ 采样时间 + 转换时间 1.5个ADC周期 + 12.5ADC周期
-
ADC复用GPIO配置: 对应的GPIO引脚配置成模拟输入的模式
ADC函数
ADC初始化函数:
-
函数使用 函数:ADC_Init 入参:ADC 结构体指针 返回值:无
-
ADC_InitTypedef结构体成员变量 ADC_Mode: ADC_Mode_Independent 独立模式,ADC1与ADC2各转换各的,还有双ADC模式 ADC_DataAlign: ADC_DataAlign_Right / ADC_DataAlign_Left 转换结果16位,采用右对齐直接取结果 ADC_ExternalTrigConv: ADC_ExternalTrigConv_None,不使用外部触发,使用软件触发 ADC_ContinuousConvMode:ENABLE:连续转换模式 DISABLE:单次转换模式 ADC_ScanConvMode: ENABLE:扫描模式 DISABLE:非扫描模式 ADC_NbrOfChannel: 规则组转换列表通道数值 注意 ADC_NbrOfChannel配置扫描模式才起作用
-
函数调用示例
ADC_InitTypeDef ADC_InitStructure; ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; ADC_InitStructure.ADC_ScanConvMode = DISABLE; ADC_InitStructure.ADC_NbrOfChannel = 1; ADC_Init(ADC1, &ADC_InitStructure);
ADC时钟分频函数:
-
函数使用 函数:RCC_ADCCLKConfig 入参:分频值(RCC_PCLK2_Div2,RCC_PCLK2_Div4,RCC_PCLK2_Div6,RCC_PCLK2_Div8) 返回值:无 注意 ADC时钟此单片机最大为14MHZ
-
函数调用示例
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
ADC规则组通道配置函数:
-
函数使用 函数:ADC_RegularChannelConfig 入参:ADC ADC通道 序列号 ADC采样时间 返回值:无
-
函数调用示例
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5);
ADC启动函数:
-
函数使用: 函数:ADC_Cmd 入参:定时器 ENABLE/ DISABLE 返回值:无
-
函数调用示例:
ADC_Cmd(ADC1, ENABLE);
ADC校准函数
-
总调用示例
ADC_ResetCalibration(ADC1); while (ADC_GetResetCalibrationStatus(ADC1) == SET); ADC_StartCalibration(ADC1); while (ADC GetCalibrationStatus(ADC1) == SET);
注意 调用时机:上电后,调用ADC_Cmd后 校准好了是标志位清零,函数返回状态RESET
ADC触发转换函数:
-
函数使用: 函数:ADC_SoftwareStartConvCmd 入参:ADC ENABLE/ DISABLE 返回值:无
-
函数调用示例:
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
ADC获取转换结果函数:
-
函数使用: 函数:ADC_GetConversionValue 入参:ADC 标志位 返回值:SET / RESET
-
函数调用示例:
uint16_t val = ADC_GetConversionValue(ADC1);
ADC标志位: ADC_GetFlagStatus函数: ADC_FLAG_EOC:代表ADC转换完成
ADC_GetITStatus函数: ADC_IT_EOC:代表ADC转换完成
ADC单通道模块函数
void ADC_Init(void)
RCC_APB2PeriphClockCmd RCC_APB2PeriphClockCmd RCC_ADCCLKConfig GPIO_Init ADC_RegularChannelConfig ADC_Init ADC_Cmd ADC_ResetCalibration ADC_GetResetCalibrationStatus ADC_StartCalibration ADC_GetCalibrationStatus
uint16_t ADC_GetValue(void) ADC_SoftwareStartConvCmd ADC_GetFlagStatus ADC_GetConversionValue
更多推荐

所有评论(0)