关于CH32V208(F208)使用LSI与ADC时的处理注意事项

使用208的MCU,当用到LSI作为Tmos的时基,受温度频偏影响较大,为了增强系统稳定性,蓝牙的库里内置了一套温度校准算法,需要用到ADC模块进行温度采样,

这样之后就会导致客户应用层ADC的采样中断,要是单次采样还可以重新配置,当是循环采样的时候,即会发生ADC模块的卡死。

【TEMPERATION】
TEM_SAMPLE - 是否打开根据温度变化校准的功能,单次校准耗时小于10ms( 默认:TRUE )

 

 以上图中对应代码位置,此处处理只是想让应用层不受影响,但是ADC的寄存器比较特殊,有些寄存器开启之后会由硬件改变,导致库中调用温度采集之前保存的寄存器还原后无法继续工作,

导致客户应用层代码的标志位判断卡死。此处正确的做法即应该对ADC重新初始化,如使用DMA,也需要将DMA的传输长度与起始地址进行初始化。

即在上图HAL_GetInterTempValue(void)函数 最后重新调用ADC_Init();随后对DMA操作。

DMA_Cmd(DMA1_Channel1, DISABLE);
DMA1_Channel1->CNTR = 3;
DMA1_Channel1->MADDR= (u32)buf;
DMA_Cmd(DMA1_Channel1, ENABLE);
ADC_SoftwareStartConvCmd(ADC1, ENABLE);

 

posted @ 2024-12-30 20:36  WCH_CH32  阅读(106)  评论(0)    收藏  举报