本人参考STM32参考书籍编写AD程序。使用PC4作为AD1的第14路输入,只采一路,软件启动。但发现程序运行到函数while( !adc_flag_get(ADC1,ADC_FLAG_EOC));无法出死循环,应该是AD没有启动。请各位大侠帮忙看一下程序那里没有配对。
uint16_t ADC_sam = 0;
void PWM_GPIO_init()
{
gpio_init(GPIOA,GPIO_MODE_AF_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_8);
gpio_init(GPIOB,GPIO_MODE_AF_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_13);
gpio_init(GPIOC,GPIO_MODE_AIN,GPIO_OSPEED_50MHZ,GPIO_PIN_4);
}
void RCU_init()
{
rcu_periph_clock_enable(RCU_TIMER0);
rcu_periph_clock_enable(RCU_GPIOA);
rcu_periph_clock_enable(RCU_GPIOB);
rcu_periph_clock_enable(RCU_AF);
rcu_periph_clock_enable(RCU_ADC1);
rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV4);
}
void ADC_int()
{
adc_deinit(ADC1);
adc_mode_config(ADC_MODE_FREE);
adc_data_alignment_config(ADC1,ADC_DATAALIGN_RIGHT);
adc_channel_length_config(ADC1,ADC_REGULAR_CHANNEL,1);
adc_resolution_config(ADC1,ADC_RESOLUTION_12B);
adc_special_function_config(ADC1,ADC_SCAN_MODE,DISABLE);
adc_special_function_config(ADC1,ADC_CONTINUOUS_MODE,DISABLE);
adc_external_trigger_config(ADC1,ADC_REGULAR_CHANNEL,DISABLE);
adc_discontinuous_mode_config(ADC1,ADC_REGULAR_CHANNEL,1);
adc_regular_channel_config(ADC1,1,ADC_CHANNEL_14,ADC_SAMPLETIME_7POINT5);
adc_enable(ADC1);
// adc_calibration_enable (ADC1);
}
uint16_t GET_ADC(void)
{
adc_software_trigger_enable(ADC1,ADC_REGULAR_CHANNEL);
while( !adc_flag_get(ADC1,ADC_FLAG_EOC));
return adc_regular_data_read(ADC1);
}
int main(void)
{
RCU_init();
PWM_GPIO_init();
ADC_int();
while(1)
{
ADC_sam = GET_ADC();
}
}
|