FR801XHA 的ADC 交流 AVDD是AVDIO引脚电压吗?
-
-
我的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); -
添加头文件处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); -
添加文件处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;
-