WCH沁恒单片机
直播中

duke刘

9年用户 744经验值
擅长:可编程逻辑
私信 关注
[问答]

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);
}


期待您的答复,谢谢!


  

回帖(1)

李云逍

2022-9-5 09:38:42
你好,可以参考ch579evt中的adc例程,里面有将获取到的内部温度传感器的adc值转换成温度值的函数。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分