输出结果: 代码: int main(void) { system_clock_config();//系统时钟初始化 nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);//设置中断分组 at32_board_init();//延时函数初始化 crm_clocks_freq_get(&clocks_struct); USART_init(115200);//串口初始化函数 ADC_init();//ADC初始化函数 printf("test code.....!!!!\r\n"); printf("software_trigger_repeat \r\n"); while(1) { while(adc_flag_get(ADC1, ADC_CCE_FLAG) == RESET);//等待转换完成 adc_result = adc_ordinary_conversion_data_get(ADC1); adc_value = adc_result * 3.3 / 4095; printf("voltage = %0.2f\r\n", adc_value); delay_ms(2000); } } 初始化: void ADC_init(void) { gpio_init_type gpio_initstructure; adc_base_config_type adc_base_struct; crm_periph_clock_enable(CRM_ADC1_PERIPH_CLOCK, TRUE); crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE); gpio_default_para_init(&gpio_initstructure);//GPIO默认参数初始化 /* config adc pin as analog input mode */ gpio_initstructure.gpio_mode = GPIO_MODE_ANALOG;//模拟输入 gpio_initstructure.gpio_pins = GPIO_PINS_1;//ADC1通道1 gpio_init(GPIOA, &gpio_initstructure); adc_clock_div_set(ADC_DIV_16);//ADC时钟16分频 adc_base_default_para_init(&adc_base_struct);//ADC默认参数初始化 adc_base_struct.sequence_mode = TRUE;//序列模式 adc_base_struct.repeat_mode = TRUE;//开启反复模式 每次触发转换一组通道 连续模式 adc_base_struct.data_align = ADC_RIGHT_ALIGNMENT;//数据右对齐 adc_base_struct.ordinary_channel_length = 1;//普通通道序列长度 1 3 adc_base_config(ADC1, &adc_base_struct); /* ADC1初始化普通通道 1:将通道1放在ADC转换菜单的第一个位置 */ adc_ordinary_channel_set(ADC1, ADC_CHANNEL_1, 1, ADC_SAMPLETIME_41_5);//ADC采样时间41.5个周期 // adc_ordinary_channel_set(ADC1, ADC_CHANNEL_5, 2, ADC_SAMPLETIME_41_5);//2:通道5放在ADC转换菜单的第二个位置 // adc_ordinary_channel_set(ADC1, ADC_CHANNEL_6, 3, ADC_SAMPLETIME_41_5);//3:通道6放在ADC转换菜单的第三个位置 /* 普通通道转换组触发模式使能及触发事件选择 */ adc_ordinary_conversion_trigger_set(ADC1, ADC12_ORDINARY_TRIG_SOFTWARE, TRUE);//使用软件触发 /* adc enable */ adc_enable(ADC1, TRUE);//ADC1使能 /* adc calibration */ adc_calibration_init(ADC1);//ADC初始化校准 while(adc_calibration_init_status_get(ADC1));//初始化校准状态获取 adc_calibration_start(ADC1);//ADC校准开始 while(adc_calibration_status_get(ADC1));//ADC校准状态获取 /* 反复转换模式打开:软件触发使能之后会一直进行转换 */ /* 反复转换模式关闭:软件触发使能之后会转换一次就结束了 */ adc_ordinary_software_trigger_enable(ADC1, TRUE);//软件触发使能打开 }
|