高级会员

- 积分
- 679
- 金钱
- 679
- 注册时间
- 2020-11-21
- 在线时间
- 67 小时
|
发表于 2020-12-1 09:42:13
|
显示全部楼层
- #include "adc.h"
- #include "delay.h"
- void Adc_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- ADC_InitTypeDef ADC_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1, ENABLE);
- RCC_ADCCLKConfig(RCC_PCLK2_Div6); //72/6=12 最大不超过14MHz
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- ADC_DeInit(ADC1);
- ADC_InitStructure.ADC_Mode = ADC_Mode_RegSimult; //规则通道模式
- ADC_InitStructure.ADC_ScanConvMode = ENABLE; //扫描模式
- ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //单次转换
- ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
- ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
- ADC_InitStructure.ADC_NbrOfChannel = 3;
- ADC_Init(ADC1, &ADC_InitStructure);
-
- ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_239Cycles5); //通道0
- ADC_RegularChannelConfig(ADC1,ADC_Channel_1,2,ADC_SampleTime_239Cycles5);
- ADC_RegularChannelConfig(ADC1,ADC_Channel_2,3,ADC_SampleTime_239Cycles5);
-
- ADC_DiscModeChannelCountConfig(ADC1,1); //间断模式 设置规则组 序列数 每触发一次就转换一个通道
- ADC_DiscModeCmd(ADC1,ENABLE);
-
- ADC_Cmd(ADC1,ENABLE);
-
- ADC_ResetCalibration(ADC1); //开启复位校准
- while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位结束
-
- ADC_StartCalibration(ADC1); //开启AD校准
- while(ADC_GetCalibrationStatus(ADC1)); //等待校准结束
- }
- u16 Get_Adc(void)
- {
- ADC_SoftwareStartConvCmd(ADC1,ENABLE);
- //此处如果等待标志位的话,程序会卡死 规则通道模式下,所有通道都转换完成之后,EOC标志才会置位
- //while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)); //等待转换结束
- delay_us(30);
- return ADC_GetConversionValue(ADC1); //返回采样值
- }
复制代码 |
|