织梦html5手机网站模板,深圳网站建设开发哪家好,有没有做软件的外包网站,网站开发技术服务费合同范本硬件电路 接线图#xff1a; ADC基本结构图 代码配置
根据基本结构框图
1.定义结构体变量
//定义结构体变量
GPIO_InitTypeDef GPIO_InitStructure;//定义GPIO结构体变量
ADC_InitTypeDef ADC_InitStructure; //定义ADC结构体变量
2.开启RCC时钟
ADC、GPIO的时钟#x… 硬件电路 接线图 ADC基本结构图 代码配置
根据基本结构框图
1.定义结构体变量
//定义结构体变量
GPIO_InitTypeDef GPIO_InitStructure;//定义GPIO结构体变量
ADC_InitTypeDef ADC_InitStructure; //定义ADC结构体变量
2.开启RCC时钟
ADC、GPIO的时钟这里ADCCLK的分频器也需要配置一下选择6分频 ADCCLK 72MHz/6 12MHz
//开启RCC时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);//开启ADC1的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//开启GPIO A族时钟
RCC_ADCCLKConfig(RCC_PCLK2_Div6); //配置分频器 选择6分频 分频之后ADCCLK 72MHz/6 12MHz
3.配置GPIO
把需要用的GPIO配置成模拟输入的模式在AIN模式下GPIO口是无效的断开GPIO防止GPIO的输入输出对模拟电压造成干扰AIN模式就是ADC专属模式
//配置GPIO
GPIO_InitStructure.GPIO_Mode GPIO_Mode_AIN;//选择模拟输入
GPIO_InitStructure.GPIO_Pin GPIO_Pin_0; //配置引脚
GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; //速率GPIO_Init(GPIOA, GPIO_InitStructure); //GPIO初始化
4.配置多路开关
把左面的通道接入到右边的规则组列表里
//配置多路开关
ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_55Cycles5);
5.配置ADC转换器
用结构体配置包括ADC是单次转换还是连续转换、扫描还是非扫描、有几个通道、触发源是什么、数据对齐是左对齐还是右对齐
//配置ADC转换器
ADC_InitStructure.ADC_ContinuousConvMode DISABLE;//选择连续转换模式还是单次转换 本次单次转换
ADC_InitStructure.ADC_DataAlign ADC_DataAlign_Right; //指定ADC数据是左对齐还是右对齐 这次选择右对齐
ADC_InitStructure.ADC_ExternalTrigConv ADC_ExternalTrigConv_None;//触发控制的触发源 本次使用软件触发
ADC_InitStructure.ADC_Mode ADC_Mode_Independent;//配置独立模式还是双ADC模式 这里选独立模式
ADC_InitStructure.ADC_NbrOfChannel 1;//在扫描模式下总共会用到几个通道
ADC_InitStructure.ADC_ScanConvMode DISABLE;//选择扫描模式还是非扫描模式 本次非扫描
ADC_Init(ADC1, ADC_InitStructure);
6.开关控制
调用ADC_Cmd函数开启ADC根据手册建议最好开启校准
//开关控制 开启ADC
ADC_Cmd(ADC1,ENABLE);//开启ADC电源//校准
ADC_ResetCalibration(ADC1);//复位校准
while(ADC_GetResetCalibrationStatus(ADC1) SET);//返回复位校准状态
ADC_StartCalibration(ADC1);//开始校准
while(ADC_GetCalibrationStatus(ADC1) SET);//获取校准状态
本次没有用上模拟看门狗以及中断输出控制和NVIC
整体代码
void AD_Init(void)
{//定义结构体变量GPIO_InitTypeDef GPIO_InitStructure;//定义GPIO结构体变量ADC_InitTypeDef ADC_InitStructure; //定义ADC结构体变量//开启RCC时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);//开启ADC1的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//开启GPIO A族时钟RCC_ADCCLKConfig(RCC_PCLK2_Div6); //配置分频器 选择6分频 分频之后ADCCLK 72MHz/6 12MHz//配置GPIOGPIO_InitStructure.GPIO_Mode GPIO_Mode_AIN;//选择模拟输入GPIO_InitStructure.GPIO_Pin GPIO_Pin_0; //配置引脚GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; //速率GPIO_Init(GPIOA, GPIO_InitStructure); //GPIO初始化//配置多路开关ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_55Cycles5);//配置ADC转换器ADC_InitStructure.ADC_ContinuousConvMode DISABLE;//选择连续转换模式还是单次转换 本次单次转换ADC_InitStructure.ADC_DataAlign ADC_DataAlign_Right; //指定ADC数据是左对齐还是右对齐 这次选择右对齐ADC_InitStructure.ADC_ExternalTrigConv ADC_ExternalTrigConv_None;//触发控制的触发源 本次使用软件触发ADC_InitStructure.ADC_Mode ADC_Mode_Independent;//配置独立模式还是双ADC模式 这里选独立模式ADC_InitStructure.ADC_NbrOfChannel 1;//在扫描模式下总共会用到几个通道 ADC_InitStructure.ADC_ScanConvMode DISABLE;//选择扫描模式还是非扫描模式 本次非扫描ADC_Init(ADC1, ADC_InitStructure);//开关控制 开启ADCADC_Cmd(ADC1,ENABLE);//开启ADC电源//校准ADC_ResetCalibration(ADC1);//复位校准while(ADC_GetResetCalibrationStatus(ADC1) SET);//返回复位校准状态ADC_StartCalibration(ADC1);//开始校准while(ADC_GetCalibrationStatus(ADC1) SET);//获取校准状态}
功能代码
uint16_t AD_GetValue(void)
{ADC_SoftwareStartConvCmd(ADC1,ENABLE);//软件触发转换while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC) RESET);//判断转换是否完成return ADC_GetConversionValue(ADC1);//获取转换结果}
主函数
#include AD.h
int main(void)
{OLED_Init();AD_Init(); uint16_t value;float volatge;OLED_ShowString(1, 1, Value:);OLED_ShowString(2, 1, VOlatge:0.00V);while(1){value AD_GetValue();volatge (float)value / 4050 * 3.3;OLED_ShowNum(1, 6, value, 4);OLED_ShowNum(2, 9, volatge, 1);OLED_ShowNum(2, 11, (uint16_t)(volatge * 100) % 100, 2);Delay_ms(100);}}