[STM32F1]

分享 解决了STM32 ADC卡死在 while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));

[复制链接]
9786|3
手机看帖
扫描二维码
随时随地手机跟帖
a1993s05d21|  楼主 | 2016-11-18 15:49 | 显示全部楼层 |阅读模式
之前总是死在这句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));的读取函数,就可以解决。

mmuuss586| | 2016-11-18 17:27 | 显示全部楼层
谢谢分享

使用特权

评论回复
ylq168| | 2017-7-15 19:36 | 显示全部楼层
我也遇到同样的问题啦 ,但是我发现是我在仿真界面里一直读取了DR的值。所以出现了问题

使用特权

评论回复
Cavan| | 2017-7-25 16:42 | 显示全部楼层
我遇到过ad采样模块长期运行中死了的情况,其他功能都正常,重新上电就好了,后来我就在程序里定时给adc模块重启

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

51

帖子

1

粉丝