[STM32F0] f030r8t6的片上ADC标志EOC清除问题

[复制链接]
4009|9
 楼主| 无帝老三 发表于 2016-6-16 11:23 | 显示全部楼层 |阅读模式
        ADC_ClearFlag(ADC1,ADC_FLAG_EOC);
                //ADC_ClearFlag(ADC1,ADC_FLAG_EOSEQ);
               
        ADC_StartOfConversion(ADC1);
               
                //while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOSEQ)==RESET);
                //while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)==RESET);  
                while (!(ADC1->CR & 0x04));
        atomizevalue[idx] = ADC_GetConversionValue(ADC1);
                watchvalue = atomizevalue[idx];

程序总是死在判断EOC标志置位的地方,
单步调试时,执行完ADC_StartOfConversion(ADC1);
查看ADC的寄存器CR,发现EOC  EOSEQ都置位了,然后f10,
瞬间EOC就清除了,我真是服了,我一没软件写1清除,2没读数据,EOC标志还会自动清除的吗?

我采用的软件触发单通道单次采样,每次发一次start命令才会触发一次ADC.
请求路过的大神指点下,手册上难道遗漏了?
 楼主| 无帝老三 发表于 2016-6-16 11:27 | 显示全部楼层
Bit 2 EOC: End of conversion flag
This bit is set by hardware at the end of each conversion of a channel when a new data result is
available in the ADC_DR register. It is cleared by software writing 1 to it or by reading the ADC_DR
register.
0: Channel conversion not complete (or the flag event was already acknowledged and cleared by
software)
1: Channel conversion complete
 楼主| 无帝老三 发表于 2016-6-16 16:13 | 显示全部楼层
没有大神指点一下吗?
把EOC标志改为EOSEQ标志就正常
xmshao 发表于 2016-6-20 17:36 | 显示全部楼层
这个不只是F0才有的现象。
其它系列在单步调试时也会遇到这个现象。

ADC转换后EOC置位了,调试器实时读取ADC_DR寄存器导致EOC很快清零了。因为读取ADC_DR会将
EOC清零。

这点知道就好,不影响什么。

Rangar 发表于 2016-6-20 21:57 | 显示全部楼层
EOC转换结束标志位
Thethree 发表于 2016-6-20 22:35 | 显示全部楼层
无帝老三 发表于 2016-6-16 16:13
没有大神指点一下吗?
把EOC标志改为EOSEQ标志就正常

不太清楚,不知道这两个标志的区别是什么?
 楼主| 无帝老三 发表于 2016-6-21 08:55 | 显示全部楼层
xmshao 发表于 2016-6-20 17:36
这个不只是F0才有的现象。
其它系列在单步调试时也会遇到这个现象。

奥,谢谢了
sourceInsight 发表于 2016-6-21 14:07 | 显示全部楼层
试一试  ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
bbapple 发表于 2016-6-21 14:08 | 显示全部楼层
先进行单步调试试试吧。。。
handleMessage 发表于 2016-6-21 14:24 | 显示全部楼层
我想可以直接用AD读到寄存器,再拿出来处理吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

64

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部