WCH57x BLE协议栈初始化,注册HAL_GetInterTempValue函数,此函数是否需要修改?


蓝牙模块:WCH579

文件版本:WCH57x_BLE_LIB_V1.7

简要说明:在初始化协议栈函数中,需要注册一个获取当前温度的函数HAL_GetInterTempValue追踪分析发现,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);
}


期待您的答复,谢谢!


你好,可以参考ch579evt中的adc例程,里面有将获取到的内部温度传感器的adc值转换成温度值的函数。


谢谢 wangyy

已经增加计算温度的代码,测试内部温度为31℃左右



只有登录才能回复,可以选择微信账号登录