仰慕于STM32H23的高速度高性能,买了一块STMH723ZGT6的学习板,模拟量供电通过磁珠隔离3.3V,3.3V由5V的USB LDO降压得到。运行ADC+DMA采集的程序,使用cubemx生成的代码。采集两个通道:ADC1_IN2(PF14)和ADC_IN6(PF15),发现如下问题:
(1)这两个管脚都接高电平3.3V,ADC检测值均为65535(16bit)或4095(12bit),正常;
(2)这两个通道都接低电平,0V时,ADC的数字量12XX(16ibt)或80左右(12bit),0点误差很大;
(3)增加了自校准指令
if(HAL_ADCEx_Calibration_Start(&hadc1, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED) != HAL_OK)
{
}
if(HAL_ADCEx_Calibration_Start(&hadc1, ADC_CALIB_OFFSET_LINEARITY, ADC_SINGLE_ENDED) != HAL_OK)
{
}
误差缩小了,16位模式下,0点采集到的数字量大约在110--120左右。
针对以上现象,我想请教下:
(1)这样的结果是不是正常结果?
(2)自校准指令必须添加在ADC初始化和通道初始化之间,没有沙箱代码的位置,每次重新生成代码都会被擦除,有什么好方法?
谢谢大家!
|