啊啊啊!救救大吊萌妹#GD32E103C8T6#ADC问题

[复制链接]
790|9
手机看帖
扫描二维码
随时随地手机跟帖
加油吧!宝宝!|  楼主 | 2021-3-4 09:18 | 显示全部楼层 |阅读模式
本帖最后由 加油吧!宝宝! 于 2021-3-4 11:55 编辑

使用的芯片型号是GD32E103C8T6,用热敏检测温度,发现PA0和PA5的ADC功能正常,但是PA6的ADC功能异常,程序一直卡死在等待ADC转换结束那个节点,请各位大神帮帮忙!while(SET != adc_flag_get(adc_periph,ADC_FLAG_EOC));//等待转换结束             
InkedPA6_LI.jpg
代码如下:
#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);//返回常规通道数据
}





















使用特权

评论回复
gxp6604| | 2021-3-4 09:52 | 显示全部楼层
看下VDDA电压超了没

使用特权

评论回复
Jelin| | 2021-3-10 11:37 | 显示全部楼层
adc_software_trigger_enable(ADC1,ADC_CHANNEL);


这一句,应该每次软件触发采集都要写一次。

使用特权

评论回复
sonicll| | 2021-3-10 13:45 | 显示全部楼层
这几句里的参数写错了,不是ADC_CHANNEL,而应该是ADC_REGULAR_CHANNEL

adc_external_trigger_source_config(ADC1, ADC_CHANNEL, ADC0_1_EXTTRIG_REGULAR_NONE);
adc_external_trigger_config(ADC1, ADC_CHANNEL, ENABLE);

adc_software_trigger_enable(ADC1,ADC_CHANNEL);

使用特权

评论回复
评论
加油吧!宝宝! 2021-3-19 14:56 回复TA
是的!我写错了,我粗心了!改回来就正确了! 
keaibukelian| | 2021-4-4 11:45 | 显示全部楼层
采集电压范围是多少啊

使用特权

评论回复
labasi| | 2021-4-4 11:47 | 显示全部楼层
为什么每次采集都要写啊

使用特权

评论回复
paotangsan| | 2021-4-4 11:50 | 显示全部楼层
恭喜楼主解决问题

使用特权

评论回复
renzheshengui| | 2021-4-4 11:52 | 显示全部楼层
看来干啥都要细心啊

使用特权

评论回复
wakayi| | 2021-4-4 11:54 | 显示全部楼层
我也记下来 以后不犯这种低级错误

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

27

帖子

0

粉丝