在使用ADC的时候发现一些疑问,和调试分析分享 1.手册上介绍ADC有个低功耗模式,配置寄存器将AUTOFF=1和WAIT=1,可以让ADC在转换完成后自动关闭,再次触发时会自动开启,可以有效降低功耗。我将这两位功能使能后,发现每次想开启采样,若采用LL库函数LL_ADC_Enable()将ADEN位置1后,是无法等到ADRDY位被置1的,也就是ADRDY始终是0,但是如果不给ADEN置1,直接用LL_ADC_REG_StartConversion()函数给ADSTART位置1,让ADC开始转换,也是可以正常开始的,读到的ADC结果也正常。想问一下这是不是就是AUTOFF和WAIT产生的效果,那么在使用中,只要使能这两位,每次开启ADC采样的时候,直接使能开始ADSTART=1就可以了,不用再让ADEN=1,这样对吗? 2.结合第1个问题,我使用的cubeMX的LL库生成的ADC初始化函数,其中将AUTOFF=1,WAIT=1,上电后,运行完该初始化函数后,使用了校准功能,调用了LL_ADC_StartCalibration(ADC1)进行校准,调试发现,执行完该校准,再延时几个时钟周期后,ADC好像就已经可以正常工作,也是没有ADEN=1的情况下,直接让ADSTART=1,ADC就可以采集到正确数据了。我看到手册中有这样一个描述:启动校准(将ADCAL置1)时,或者使能ADC时(将ADEN置1),ADVREGEN位通过硬件被置1。也就是说执行了校准操作后ADC的调压器被使能了,且又被配置成了AUTOFF=1和WAIT=1的模式,那么在调压器使能的状态下,只要执行ADSTART=1就可以正常开始转换了。再结合其他讨论中有人说到如果要在系统进入低功耗模式前将ADC的调压器失能ADVREGEN=0才可以,据此推断,如果系统唤醒后想让ADC恢复正常工作,必须再执行一次校准操作或者执行一次ADEN=1的操作才可以。我在调试中在进入芯片的STOP模式前执行了CLEAR_BIT(ADC1->CR, ADC_CR_ADVREGEN)禁止调压器,在退出STOP模式后,再执行了一次LL_ADC_StartCalibration(ADC1)的校准操作,ADC都可以恢复正常采集数据。请教一下我的上述操作是否正确可靠? 3.虽然手册中介绍说AUTOFF和WAIT使能后ADC可以在采集后自动关闭,但我想尽快降低功耗,所以每次读取到序列最后一个数据后,都再执行一次ADSTP=1和ADDIS=1的操作。我的设计采用的是定时器中断里进行一次ADC采样的方式,每次中断里采样完毕还必执行一次LL_ADC_REG_StopConversion(ADC1)让ADSTP=1使ADC停止,然后再必执行一次LL_ADC_Disable(ADC1)让ADDIS=1使ADC关闭,而下次中断进入时,也是不执行ADEN=1,直接让ADSTART=1,等待ADC获得正确的采样值。。当前调试使用这种方式都是可以获得正确的采样数据的。但拿不准是否会有隐患。请问我这样使用是否规范可靠?
|