关于ADC校准,为什么这样写,程序会死在while();循环内啊?
ADC_ResetCalibration(ADC1);
while(ADC_GetResetCalibrationStatus(ADC1) == RESET);
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1) == RESET);
只要校准没结束就一直等待,为什么程序会死呢?
while(USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET);
串口的等待发送完毕都是这样的,为什么两者出现了不一样的结果啊?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
是==SET你非要写==RESET,还问为什么。
你的是==RESET就一直循环。当然死了。
这可是官方例程这样写的:
/* Enable ADC1 reset calibration register */
ADC_ResetCalibration(ADC1);
while(ADC_GetResetCalibrationStatus(ADC1));
/* Start ADC1 calibration */
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));
//你看看这个是不是==RESET就退出循环了,你的恰恰相反。
至于为什么,你自己去查手册,没兴趣。
进行硬件仿真的时候,我也遇见了这种问题,就是一直卡在第一个while()循环内(我用的校准函数是在原子哥你的历程上复制的);查看寄存器后发现RSTCAL一直是1,ST手册中说的RSTCAL位在校准寄存器被初始化后会由硬件清零。那是不是可以认为是校准寄存器一直没有初始化成功导致的这个问题呢? 如果是这样应该的话,是什么原因因导致它一直未初始化呢?
还有就是校准寄存器是哪个?为什么在中文手册上找不到这个寄存器
软件仿真的时候则不会出现卡在while()内的情况。在网上看到类似的问题,有人说是晶振没有设置好。有可能是这种原因吗?
一周热门 更多>