关于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);
浙公网安备 33010602011771号