/********************************************************************* * @fn ADC_DataCalib_Rough * * @brief 采样数据粗调,获取偏差值,必须先配置ADC后调用此函数获取校准值 * * @param none * * @return 偏差 */ signed short ADC_DataCalib_Rough(void) // 采样数据粗调,获取偏差值 { uint16_t i; uint32_t sum = 0; uint8_t ch = 0; // 备份通道 uint8_t ctrl = 0; // 备份控制寄存器 ch = R8_ADC_CHANNEL; ctrl = R8_ADC_CFG; R8_ADC_CFG = 0; ADC_ChannelCfg(7); // 6/7/10/11 可选 R8_ADC_CFG |= RB_ADC_OFS_TEST | RB_ADC_POWER_ON | (2 << 4); // 进入测试模式 R8_ADC_CONVERT = RB_ADC_START; while(R8_ADC_CONVERT & RB_ADC_START); for(i = 0; i < 16; i++) { R8_ADC_CONVERT = RB_ADC_START; while(R8_ADC_CONVERT & RB_ADC_START); sum += (~R16_ADC_DATA) & RB_ADC_DATA; } sum = (sum + 8) >> 4; R8_ADC_CFG &= ~RB_ADC_OFS_TEST; // 关闭测试模式 R8_ADC_CHANNEL = ch; R8_ADC_CFG = ctrl; return (2048 - sum); }
以上是SDK包中计算ADC粗调偏差值的函数,不理解最后为什么要用2048去减sum的值。
热门产品 :
CH641: PD及无线充电专用MCU