diff --git a/BSP/inc/bsp_adc.h b/BSP/inc/bsp_adc.h index bc5c354..93da33e 100644 --- a/BSP/inc/bsp_adc.h +++ b/BSP/inc/bsp_adc.h @@ -12,7 +12,7 @@ #define __BSP_ADC_H__ -#include "CH59x_common.h" +#include "CONFIG.h" void BSP_ADC_Init(void); diff --git a/BSP/src/bsp_adc.c b/BSP/src/bsp_adc.c index d19ec26..afeadb5 100644 --- a/BSP/src/bsp_adc.c +++ b/BSP/src/bsp_adc.c @@ -1,5 +1,14 @@ #include "bsp_adc.h" +#include "bsp_uart.h" +#include "log.h" + +#undef LOG_ENABLE +#define LOG_ENABLE 1 + +#undef LOG_TAG +#define LOG_TAG "adc" + // https://www.cnblogs.com/gscw/p/17682385.html // 计算公式参考手册,建议使用 “建议实际可用测量电压范围” 作为 ADC 采集的增益选择判断标准。计算公式参考手册。 // 仅使用 ADC 功能,同时降低功耗,可以将引脚的数字输入功能关闭,配置 R16_PIN_ANALOG_IE。 注:如果引脚用于模拟功能(ADC/TouchKey),建议将该引脚的数字输入功能关闭,即设置数字输入禁用,从而可以降低功耗,并有利于减少干扰。 @@ -23,7 +32,7 @@ void BSP_ADC_Init(void) #if 0 // ±10C,没啥参考价值 /* 温度采样并输出 */ - PRINT("\n1.Temperature sampling...\n"); + logDebug("\n1.Temperature sampling...\n"); ADC_InterTSSampInit(); for (i = 0; i < 20; i++) { @@ -33,7 +42,7 @@ void BSP_ADC_Init(void) { uint32_t C25 = 0; C25 = (*((PUINT32)ROM_CFG_TMP_25C)); - PRINT("%d %d %d \n", adc_to_temperature_celsius(adcBuff[i]), adcBuff[i], C25); + logDebug("%d %d %d \n", adc_to_temperature_celsius(adcBuff[i]), adcBuff[i], C25); } #endif @@ -56,11 +65,12 @@ void BSP_ADC_Init(void) min_number = ((min_number > adcBuff[i]) ? adcBuff[i] : min_number); // 软件滤波 max_number = ((max_number < adcBuff[i]) ? adcBuff[i] : max_number); } - printf("min_number = %d, max_number = %d\n", min_number, max_number); + logDebug("min_number = %d, max_number = %d", min_number, max_number); CountBat = (CountBat - min_number - max_number) / 18; // 删除最小与最大值 - printf("AverageCountBat = %d\n", CountBat); + logDebug("AverageCountBat = %d", CountBat); #endif +#if 0 // 默认情况下,ADC 引脚和所在 GPIO 引脚的数字功能是同时存在的 // ,在进行 ADC 测量时候,需要吧 GPIO 设置为高阻输入 // ,当 ADC 的电平处于中间态的时候,这时候往往会导致数字部分漏电 @@ -75,12 +85,12 @@ void BSP_ADC_Init(void) ADC_ExtSingleChSampInit(SampleFreq_3_2, ADC_PGA_0); RoughCalib_Value = ADC_DataCalib_Rough(); // 用于计算ADC内部偏差,记录到全局变量 RoughCalib_Value中 - PRINT("RoughCalib_Value =%d \n", RoughCalib_Value); + logDebug("RoughCalib_Value =%d", RoughCalib_Value); // 刚上电,要给电容充电 DelayMs(300); - printf("PA13:::::\n"); + logDebug("PA13:::::"); ADC_ChannelCfg(3); for (i = 0; i < 20; i++) @@ -88,12 +98,9 @@ void BSP_ADC_Init(void) adcBuff[i] = ADC_ExcutSingleConver() + RoughCalib_Value; // 连续采样20次 // DelayMs(5); } - printf("original: "); - for (i = 0; i < 20; i++) - { - PRINT("%d ", adcBuff[i]); // 注意:由于ADC内部偏差的存在,当采样电压在所选增益范围极限附近的时候,可能会出现数据溢出的现象 - } - printf("\n"); + logDebug("original: "); + logHexDumpAll(adcBuff, 20); + // 注意:由于ADC内部偏差的存在,当采样电压在所选增益范围极限附近的时候,可能会出现数据溢出的现象 for (i = 0; i < 20; i++) { @@ -106,9 +113,9 @@ void BSP_ADC_Init(void) min_number = ((min_number > adcBuff[i]) ? adcBuff[i] : min_number); // 软件滤波 max_number = ((max_number < adcBuff[i]) ? adcBuff[i] : max_number); } - printf("min=%d, max=%d, diff=%d\n", min_number, max_number, (max_number - min_number)); + logDebug("min=%d, max=%d, diff=%d", min_number, max_number, (max_number - min_number)); countadc = (countadc - min_number - max_number) / 18; // 删除最小与最大值 - printf("countaveradc = %d\n", countadc); + logDebug("countaveradc = %d", countadc); /* int16_t adc_raw; adc_raw = ADC_ExcutSingleConver() + RoughCalib_Value; @@ -122,6 +129,9 @@ void BSP_ADC_Init(void) voltage_mv = adc_raw*1050/4096 + (1050/2); */ voltage = (double)(countadc) / 2048 * 1.05; - printf("voltage=%1.3lf V\n", voltage); - PRINT("VIN: %1.3lf V\n", voltage * 2); + logDebug("voltage=%1.3lf V", voltage); + logDebug("VIN: %1.3lf V", voltage * 2); +#endif } + +