FR801XHA 的ADC 交流 AVDD是AVDIO引脚电压吗?



    1. 我的ADC通道采用单次采样模式 按照手册 流程 我自己重新写了初始化函数,符合我自己简单应用。由于硬件板卡还没回来,无法验证正确性,等有板卡再调试出合格的函数。
      任何MCU都记得把IO复用为ADC输入需要配置IO特性哦! 这个放在外设初始化.C文件即可
      system_set_port_mux(GPIO_PORT_D, GPIO_BIT_7, PORTD7_FUNC_ADC3);
      system_set_port_mux(GPIO_PORT_D, GPIO_BIT_6, PORTD6_FUNC_ADC2);
      system_set_port_mux(GPIO_PORT_D, GPIO_BIT_5, PORTD5_FUNC_ADC1);

    2. 添加头文件处driver_adc.h
      #define ADC_CHANNELE_0 0x01 //PD4
      #define ADC_CHANNELE_1 0x02 //PD5
      #define ADC_CHANNELE_2 0x04 //PD6
      #define ADC_CHANNELE_3 0x08 //PD67
      ...............
      void fixed_mode_adc_init(void);
      void fixed_mode_adc_start(uint8_t channel);
      uint16_t get_fixed_mode_adc_result(uint8_t channel);

    3. 添加文件处driver_adc.c 末尾

    struct adc_cfg_t cfg;
    void fixed_mode_adc_init(void)
    {
    memset((void*)&cfg, 0, sizeof(cfg));
    cfg.src = ADC_TRANS_SOURCE_PAD;
    cfg.ref_sel = ADC_REFERENCE_AVDD; //2.9V
    // cfg.int_ref_cfg = ADC_INTERNAL_REF_1_2;
    cfg.channels = 0x0E; //??;
    cfg.route.pad_to_sample = 1;
    cfg.clk_sel = ADC_SAMPLE_CLK_24M_DIV13;
    cfg.clk_div = 0x3f;
    adc_init(&cfg);
    adc_ref_avdd = adc_get_ref_voltage(ADC_REFERENCE_AVDD); //注意 芯片的这个数值 一定要读出来 再计算你的 否则adc不准!!
    factor *= adc_ref_avdd;//计算我的
    factor /= 100;
    }

    void fixed_mode_adc_start(uint8_t channel)
    {
    cfg.channels = channel;
    adc_init(&cfg);
    adc_enable(NULL, NULL, 0);
    }

    uint16_t get_fixed_mode_adc_result(uint8_t channel)
    {
    uint16_t result;
    adc_get_result(ADC_TRANS_SOURCE_PAD, channel, &result);
    return result;
    }

    注意: 外部2.9V电压这个数值 是不是Aldo out引脚来的 我发现有的板子是3.0V 有的是2.82V 所以需要读出来 再换算成你的因子
    adc_ref_avdd = adc_get_ref_voltage(ADC_REFERENCE_AVDD); //注意 芯片的这个数值 一定要读出来 再计算你的 否则adc不准!!
    factor *= adc_ref_avdd;//计算我的
    factor /= 100;