之前总是死在这句while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)); 结果我把这句删了。LZ是做计重设备的,为追求AD精度今天特意解决了这个问题,高手轻拍。
问题:我使用定时器 500微秒读取一次AD,程序死在while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));
当我把while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)); 去掉, 然后我用SWD跟踪。发现读数程序中第一次调用ADC_SoftwareStartConvCmd(ADC1,ENABLE);之后,EOC没置1,非但EOC没有置1,ADC其他寄存器都也都是0,我的AD配置函数并没有起作用,然后走到第二次读取数据,走到ADC_SoftwareStartConvCmd(ADC1,ENABLE);时,EOC任然没有置1,但是有一部分ADC寄存器已经发生了配置,走到第三遍ADC_SoftwareStartConvCmd(ADC1,ENABLE);时,EOC才置1,且此时ADC所有寄存器才完成配置,这尼玛不是坑爹吗。
解决方法:
先在主函数中只调用一次不带while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));的读数函数,后再调用带while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));的读取函数,就可以解决。
|