本篇博客重点在于标准库函数的理解与使用,搭建一个框架便于快速开发
目录
ADC简介
- ADC(Analog-Digital Converter)模拟-数字转换器
- ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁
- 12位逐次逼近型ADC,1us转换时间
- 输入电压范围:0~3.3V,
- 转换结果范围:0~4095 ,18个输入通道,可测量16个外部和2个内部信号源
- 规则组和注入组两个转换单元
- 模拟看门狗自动监测输入电压范围
STM32F103C8T6 ADC资源:ADC1、ADC2,10个外部输入通道
ADC时钟配置
就是配置上图的RCC时钟部分,为ADC提供时钟(CLOCKk)信号
已知ADC都在APB2总线(如图)
再由RCC时钟树,需要使能APB2外设的ADC时钟。ADCCLK最大为14MHz,大于14MHz将导致转换结果准确度下降。可选6分频或8分频,分别提供最大12MHz和9MHz的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);//ADC1外设时钟使能
RCC_ADCCLKConfig(RCC_PCLK2_Div6);//选择时钟6分频,ADCCLK = 72MHz / 6 = 12MHz
引脚模拟输入模式
内部通道
温度传感器和通道ADC1_IN16相连接
内部参照电压VREFINT和ADC1_IN17相连接
注意: 温度传感器和VREFINT只能出现在主ADC1中
外部通道
选择模拟输入模式,外部的模拟信号直接作为ADCx的INy(y=0~15)
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO初始化
STM32F103C8T6的PA0默认复用为ADC1_IN0
GPIO的其它参数的理解可以阅读下方博客,这里不再赘述。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //ADC1的通道0
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
规则组通道选择
在任意多个通道上以任意顺序进行的一系列转换构成成组转换。
STM32 将 ADC 的转换分为 2 个通道组:规则通道组和注入通道组。规则通道相当于你正 常运行的程序,而注入通道呢,就相当于中断。在你程序正常执行的时候,中断是可以打断你 的执行的。同这个类似,注入通道的转换可以打断规则通道的转换, 在注入通道被转换完成之后,规则通道才得以继续转换
先学习规则组通道转换ÿ