本文以武汉芯源CW32L010为例展开说明。
CW32L010是一款M0+核的MCU,主频最高可达48MHz,最大64K flash,4K RAM,内置 12 位模数转换器具有多达 14 个外部通道和 2 个内部通道(温度传感器、BGR 1.2V 电压基准),但是010的ADC参考电压只能是VDD电源电压,那BGR1.2V这个电压基准就尤为重要了。
1.2V是由内部参考电压生成器生成的,010d 1.2V的校准值存放在0x0010_07D2和0x0010_07D3这两个地址里,该值为每个MCU出厂前校准好的1.2V基准电压实测值,以mV为单位;例如下图:
也就是说我所测的板子的1.2V校准值是0x04BE,单位是mV,所以换算出来就是1214mV,也就是1.214V;在计算的时候,就将这个值带进去,先反推VDD,然后再用VDD作参考电压计算所需测量的AD值。
但是请注意,此时的1.2V不仅要从内部存储器里读出来,还要通过内部转换通道转换出来,存储器里读出来的值是标准值,基本不会根据外部电压的变化而变化,那么内部ADC转换通道转换出来的值的误差,其实就是基准VDD的误差;所以可以用ADC计算公式,用内部通道转换出来的1.2V的值,反过来推出VDD的电压即,也就是1.2V的转换电压值比上1.2V的出场校准电压值即为实际VDD电压值。