蓝牙模块:WCH579
文件版本:WCH57x_BLE_LIB_V1.7
简要说明:在初始化协议栈函数中,需要注册一个获取当前温度的函数
,
追踪分析发现,
HAL_GetInterTempValue
函数只是获取内部温度传感器的转换结果,并没有计算当前温度。
问题:现在需要正确校准内部RC,是否要增加计算温度的代码?温度的类型和精度如何处理?
还是tsCB的注释有误?
代码如下:
pfnTempSampleCB tsCB; // Register a program that read the current temperature,determine whether calibration is need
#if (defined TEM_SAMPLE) && (TEM_SAMPLE == TRUE)
cfg.tsCB = HAL_GetInterTempValue; // 根据温度变化校准RF和内部RC( 大于7摄氏度 )
#if( CLK_OSC32K )
cfg.rcCB = Lib_Calibration_LSI; // 内部32K时钟校准
#endif
uint16 HAL_GetInterTempValue(void)
{
uint8 sensor, channel, config;
uint16 adc_data;
/* 保存ADC寄存器设置 */
sensor = R8_TEM_SENSOR;
channel = R8_ADC_CHANNEL;
config = R8_ADC_CFG;
/* ADC内部温度采样 */
R8_TEM_SENSOR |= RB_TEM_SEN_PWR_ON; /* 开启温度传感器 */
R8_ADC_CHANNEL = CH_INTE_VTEMP; /* 选择内部温度传感器通道 */
R8_ADC_CFG = RB_ADC_POWER_ON | (2 << 4); /* 开启ADC,0dB无增益 */
R8_ADC_CONVERT |= RB_ADC_START; /* 启动ADC单次转换 */
while (R8_ADC_CONVERT & RB_ADC_START); /* 查询等待ADC转换结束 */
adc_data = R16_ADC_DATA;
/* 恢复ADC寄存器设置 */
R8_TEM_SENSOR = sensor;
R8_ADC_CHANNEL = channel;
R8_ADC_CFG = config;
/* 此处是否需要增加计算温度的代码 */
return(adc_data);
}
期待您的答复,谢谢!