|
ADC配置函数:
/*ADC Init*/
static void adc_init(void)
{
#if ADCS_NUMBER > 0
uint8_t adc_list[]=ADCS_LIST;
for(uint8_t i=0;i<ADCS_NUMBER;i++) //ADC引脚初始化
{
nrf_gpio_cfg_input(adc_list[i], NRF_GPIO_PIN_NOPULL);
}
nrf_adc_config_t config = {
.resolution = NRF_ADC_CONFIG_RES_8BIT, //8bit转换
.scaling = NRF_ADC_CONFIG_SCALING_INPUT_FULL_SCALE, //满刻度输入:-->关闭内部分压
.reference = NRF_ADC_CONFIG_REF_VBG //1.2v内部基准
};
nrf_adc_configure(&config);
/*adc power on*/
NRF_ADC->POWER = ADC_POWER_POWER_Enabled << ADC_POWER_POWER_Pos;
#endif // ADCS_NUMBER > 0
}
ADC读取函数
int32_t nrf_adc_convert_single(nrf_adc_config_input_t input)
{
uint32_t val;
//
// nrf_adc_input_select(input);
// nrf_adc_start();
// while (!nrf_adc_conversion_finished())
// {
// }
// nrf_adc_conversion_event_clean();
// val = nrf_adc_result_get();
// nrf_adc_stop();
// return val;
nrf_adc_input_select(input);
nrf_adc_conversion_event_clean(); //清标志
nrf_adc_start();
while (!nrf_adc_conversion_finished()); //等待ADC转换完成
/**
*参考电压:内部1.2v
*采样精度:8位
*输入电压:引脚电压(没有内部分压)
*计算公式:1200/1023 = 实测电压/AdcDat
*/
//return nrf_adc_result_get(); //直接返回ADC数据
val=nrf_adc_result_get()*4.7; //8bit采样换算成电压(mv) -->1200/255
nrf_adc_stop(); //保证进入该函数ADC处于空闲状态
return val;
}
获取的ADC数据相差太多,求教!
|
|