本帖最后由 加油吧!宝宝! 于 2021-3-4 11:55 编辑
使用的芯片型号是GD32E103C8T6,用热敏检测温度,发现PA0和PA5的ADC功能正常,但是PA6的ADC功能异常,程序一直卡死在等待ADC转换结束那个节点,请各位大神帮帮忙!while(SET != adc_flag_get(adc_periph,ADC_FLAG_EOC));//等待转换结束
代码如下:
#include "gd32e10x.h"
#include "adc.h"
#include "systick.h"
/*===========================================
adc初始化
adc gpio:
PA6: ADC01_IN6
=============================================*/
void adc_rcu_config(void)
{
/*启用GPIOA时钟*/
rcu_periph_clock_enable(RCU_GPIOA);
/*启用ADC1时钟*/
rcu_periph_clock_enable(RCU_ADC1);
/*配置ADC时钟*/
rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV4);
}
void adc_gpio_config(void)
{
/*将GPIO配置为模拟模式*/
gpio_init(ADC_GPIO_PORT, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, ADC_GPIO_PIN); //端口和引脚是宏定义
}
/*简要配置ADC外设*/
void adc_init(void)
{
/*重置ADC*/
adc_deinit(ADC1);
/*ADC模式配置*/
adc_mode_config(ADC_MODE_FREE);
/*ADC连续功能启用*/
adc_special_function_config(ADC1, ADC_CONTINUOUS_MODE, ENABLE);
/*ADC数据对齐配置*/
adc_data_alignment_config(ADC1, ADC_DATAALIGN_RIGHT);
/*采样16次,移位4位*/
adc_oversample_mode_config(ADC1,ADC_OVERSAMPLING_ALL_CONVERT,ADC_OVERSAMPLING_SHIFT_4B,ADC_OVERSAMPLING_RATIO_MUL16);
adc_oversample_mode_enable(ADC1);
/*ADC通道长度配置*/
adc_channel_length_config(ADC1, ADC_REGULAR_CHANNEL,1);
/*ADC常规通道配置*/
adc_regular_channel_config(ADC1, 0, ADC_CHANNEL, ADC_SAMPLETIME_55POINT5);
/*ADC触发配置*/
adc_external_trigger_source_config(ADC1, ADC_CHANNEL, ADC0_1_EXTTRIG_REGULAR_NONE);
adc_external_trigger_config(ADC1, ADC_CHANNEL, ENABLE);
/*启用ADC接口*/
adc_enable(ADC1);
delay_1ms(10);
/*ADC校准和重置校准*/
adc_calibration_enable(ADC1);
/*启用软件触发*/
adc_software_trigger_enable(ADC1,ADC_CHANNEL);
}
void adc_config(void)
{
adc_rcu_config();
adc_gpio_config();
adc_init();
}
uint16_t get_adc(uint32_t adc_periph)
{
adc_flag_clear(adc_periph,ADC_FLAG_EOC);
while(SET != adc_flag_get(adc_periph,ADC_FLAG_EOC));//等待转换结束 程序一直卡死在这里出不来
return adc_regular_data_read(adc_periph);//返回常规通道数据
}
|