中级会员
 
- 积分
- 222
- 金钱
- 222
- 注册时间
- 2013-12-29
- 在线时间
- 0 小时
|

楼主 |
发表于 2015-8-10 20:50:31
|
显示全部楼层
void ADC_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
ADC_CommonInitTypeDef ADC_CommonInitStructure;
ADC_InitTypeDef ADC_InitStructure;
//①开启 ADC 和 GPIO 相关时钟和初始化 GPIO
//RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能 GPIOA 时钟
//RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //使能 ADC1 时钟
//先初始化 ADC1 通道 5 IO 口
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4| GPIO_Pin_5;//PA5 通道 5
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//模拟输入
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;//不带上下拉
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化
// RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,ENABLE); //ADC1 复位 复位操作使能加上不能用,上下屏蔽这句话可以用
// RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,DISABLE); //复位结束
//②初始化通用配置
ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;//独立模式
ADC_CommonInitStructure.ADC_TwoSamplingDelay =ADC_TwoSamplingDelay_5Cycles;//两个采样阶段之间的延迟 5 个时钟
ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; //DMA 失能
ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4;//预分频 4 分频。
//ADCCLK=PCLK2/4=84/4=21Mhz,ADC 时钟最好不要超过 36Mhz
ADC_CommonInit(&ADC_CommonInitStructure);//初始化
//③初始化 ADC1 相关参数
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;//12 位模式
ADC_InitStructure.ADC_ScanConvMode = DISABLE;//非扫描模式
ADC_InitStructure.ADC_ContinuousConvMode =DISABLE;//关闭连续转换
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
//禁止触发检测,使用软件触发
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//右对齐
ADC_InitStructure.ADC_NbrOfConversion = 1;//1 个转换在规则序列中
ADC_Init(ADC1, &ADC_InitStructure);//ADC 初始化
//④开启 ADC 转换
ADC_Cmd(ADC1, ENABLE);//开启 AD 转换器
}
u16 Get_Adc(u8 ch)
{
//设置指定 ADC 的规则组通道,一个序列,采样时间
ADC_RegularChannelConfig(ADC1,ch, 1, ADC_SampleTime_480Cycles );
ADC_SoftwareStartConv(ADC1); //使能指定的 ADC1 的软件转换启动功能
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束
return ADC_GetConversionValue(ADC1); //返回最近一次 ADC1 规则组的转换结果
}
int main(void)
{
u16 ad_4,ad_5;
BSP_Init();
delay_init();
while(1)
{
ad_4=Get_Adc(4);
delay_ms(10);
ad_5=Get_Adc(5);
USART_OUT(USART1,"ad_4=%d\n",ad_4);
USART_OUT(USART1,"ad_5=%d\n",ad_5);
USART_OUT(USART1,"\n");
GPIO_ToggleBits(GPIOB, GPIO_Pin_12);
delay_ms(500);
// GPIO_ResetBits(GPIOB,GPIO_Pin_12);
// delay_ms(500); //系统滴答时钟 nms<=798 stm32f407
// GPIO_SetBits(GPIOB,GPIO_Pin_12);
}
} |
|