打印

F05X与以往的STM32系列之差别--ADC- 真的不一样啊.

[复制链接]
5715|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
静默|  楼主 | 2012-4-18 13:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
差别比较多,最主要的差别如下:
12.6.2 A
DC overrun (OVR, OVRMOD)
The overrun flag (OVR) indicates a data overrunevent, when the converted data was not read in time by the CPU or the DMA,before the data from a new conversion is available.
The OVR flag is set in the ADC_ISR register ifthe EOC flag is still at ‘1’at the time when a
new conversion completes. An interrupt can begenerated if the OVRIE bit is set in the
ADC_IER register.

话说STM32F1,2系列都可能(仅说可能,要不香版会跟我急)存在ADC多通道转换用DMA时发生错位问题,错位了,你有办法知道吗?MCU也不告诉你错位啊,所以巧妇也难做.....。

看上面的ADC OVERRUN,我暂把它翻译成ADC过冲(其实不是过冲,是CPU或DMA没来得及取)。没来得及取数时,呵呵,意外就出现了,ADC多通道转换用DMA时肯定出现错位,以前的STM32解决不了这个原因造成的错位,呵呵F05X有了这个过冲中断或标志,则应用就可立即发现错位的存在。找到了问题,巧妇们就有办法了。。。。。。。。

评分
参与人数 1威望 +1 收起 理由
cool_coder + 1 有用!
沙发
IJK| | 2012-4-18 13:59 | 只看该作者
这个标志,主要是给AD连续转换、且未使用DMA情况下用的,避免软件来不及读取AD数据。

使用特权

评论回复
板凳
午夜霓虹| | 2012-4-18 14:04 | 只看该作者
呵呵,CRC校验也不同了,增加了8位和16位校验功能。

使用特权

评论回复
地板
yinyangdianzi| | 2012-4-18 16:48 | 只看该作者
lz是来解决问题的。。同时曝光了一个问题
鉴定完毕

LZ V5

使用特权

评论回复
5
静默|  楼主 | 2012-4-18 16:58 | 只看该作者
这个标志,主要是给AD连续转换、且未使用DMA情况下用的,避免软件来不及读取AD数据。
IJK 发表于 2012-4-18 13:59


反对,看看1L加红字的原文。
when the converted data was not read in time by the CPU or the DMA.

or the DMA。

使用特权

评论回复
6
静默|  楼主 | 2012-4-18 17:01 | 只看该作者
lz是来解决问题的。。同时曝光了一个问题
鉴定完毕

LZ V5
yinyangdianzi 发表于 2012-4-18 16:48


呵呵,俺只用用ST的器件而已。
这个OVERRUN标志说明,ST肯定粉关注了ADC多通道用DAM时的错位问题,要不评空增加一个不太兼容的标志干啥?

使用特权

评论回复
7
dfsa| | 2012-4-18 18:23 | 只看该作者
LZ这数据手册看的是相当仔细

使用特权

评论回复
8
火箭球迷| | 2012-4-18 18:29 | 只看该作者
的确是很不一样

使用特权

评论回复
9
txcy| | 2012-4-18 21:37 | 只看该作者
差别还是很多的

使用特权

评论回复
10
IJK| | 2012-4-19 09:36 | 只看该作者
反对,看看1L加红字的原文。
when the converted data was not read in time by the CPU or the DMA.

or the DMA。
静默 发表于 2012-4-18 16:58


如果使用DMA,通常不会发生来不及读的情况。

使用特权

评论回复
11
airwill| | 2012-4-19 11:19 | 只看该作者
本帖最后由 airwill 于 2012-4-19 11:23 编辑

ADC多通道转换用DMA时发生错位问题, 也算在遮遮掩掩中得到了官方的间接证实. 并且给出了可能发生的原因.
但是不是有了这 OVERRUN 位就一定能够解决问题呢? 我看未必.
在我的测试环境中, 是 4 个 ADC 通道的规则转换, 而出现错位的情况都是2个数据的错位. 没有发现其他错误情况. 如果是 OVERRUN 的原因. 那我就肯定会遇到其他错位的情况!
对于楼上 "如果使用DMA,通常不会发生来不及读的情况", 我感觉这话有点武断.
一方面 DMA 争夺总线的优先级不高. 而在 72MHz 系统里, 其实 FLASH 的读取是非常忙碌的.如果大量使用 32 位指令, FLASH 总线是跟不上 cpu 的(因为4个周期才读到2条指令). 而 ADC 的速度很快, 才 1uS多. 所以不及读 ADC 结果的情况是可能发生的.
    我记得有 关于 DMA 占有一半总线带宽的说法, 今天查好多资料, 既然没有找到这条. 如果真有这条, 就不该 OVERRUN  了.

使用特权

评论回复
12
午夜霓虹| | 2012-4-19 12:42 | 只看该作者
以前遇到过错位的情况,后来换了编译器没发现了,呵呵,不知道是运气还是什么原因,以前错位只要设置个断点就错位了,而且错位了以后在设置断定的话,不会再发生变化,所以也是很奇怪。不过我想在采样的时候加个采样监控什么的,问题不是很大。

使用特权

评论回复
13
无冕之王| | 2012-4-19 18:31 | 只看该作者
改进的地方的确是不少

使用特权

评论回复
14
xsgy123| | 2012-4-19 20:29 | 只看该作者
ST的产品的确是在不断改进,会越来越好

使用特权

评论回复
15
MOZATE| | 2012-4-19 21:50 | 只看该作者
有没搞错! ST明明的坑咱们啊! 还说TMD 不断改进!
摆明就是芯片的BUG! 设计师搞的。

看看其他的芯片,好比TMS320的芯片,有如此的BUG吗? 坑了你,你还喊声爹!
那真是坑爹啊!

使用特权

评论回复
16
lut1lut| | 2012-4-20 17:31 | 只看该作者
呵呵,俺只用用ST的器件而已。
这个OVERRUN标志说明,ST肯定粉关注了ADC多通道用DAM时的错位问题,要不评空增加一个不太兼容的标志干啥?
静默 发表于 2012-4-18 17:01


这个ADC的OVR,F2里就有了。

使用特权

评论回复
17
中国洋派| | 2012-4-21 16:56 | 只看该作者
能不能做个标志,多转换一次,你再判断。

使用特权

评论回复
18
AXNG| | 2012-4-23 13:26 | 只看该作者
我也是遇到过ADC转换盒错位的问题,当时在程序中设置一个断点后,便会发生错位,以后就再也无法恢复;到现在也没有解决。还有一个问题就是LZ说的OVR标志如果为1时,ADC变无法进行下一次转换。我用的就是DMA 方式传输,一样出现OVR标志置1的情况,看过官方的一些文档那个,说是可以将标志位清楚,DMA复位,然后重新初始化ADC就可以了,但是经过验证,全都无效!只要发生OVR置位,ADC无法进行正常转换了.不知道谁有类似情况,分享解决经验。

使用特权

评论回复
19
Ryanhsiung| | 2012-4-23 19:24 | 只看该作者
求教:错位是什么??

使用特权

评论回复
20
cool_coder| | 2014-3-19 10:57 | 只看该作者
虽然我碰到的问题细节不尽相同,但是很有启发。

使用特权

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

本版积分规则

个人签名:Nothing.

15

主题

171

帖子

1

粉丝