打印

STM32 DMA 的问题

[复制链接]
2722|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
airwill|  楼主 | 2010-7-18 07:25 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
最近调试 ADC 采样.
在 ADC1 规则序列采样设定 4 路, 由 DMA1 通道1 进行数据传输. 循环传输方式. 仅用软件触发规则序列
另外还使用了 注入采样, 由定时器触发.

现在发现, 在工作过程中,  DMA1 的 通道1 的 CNDTR 由 4 莫名其妙地 变成了 2.
当然采样的数据也发生了错误. 我调试中发现, 前后两通道的数据(DMA 后的内存数据)对调了.

为此, 我设定 DMA 中断. 来捕捉这个  CNDTR  的变化,
却奇怪地发现数据发生错误了, 中断却并没有捕捉到这个变化. 当然此时在中断入口设定断点,
单步跟踪, 是能发现 CNDTR 的变化的.

根据数据手册, CNDTR 是不能更改的, 只要 EN 没有关闭, 我的软件就没有关闭过 DMA 这个通道,
所以, 软件导致的变化应该不大可能.
奇怪 + 奇怪!
沙发
airwill|  楼主 | 2010-7-20 12:31 | 只看该作者
没有人遇到过吗? 自己顶一下

使用特权

评论回复
板凳
秋天落叶| | 2010-7-20 20:42 | 只看该作者
帮顶一下

使用特权

评论回复
地板
airwill|  楼主 | 2010-7-23 12:15 | 只看该作者
最近发现, 定时器的 DMA 也有存在类似传输错误. 难道是 STM32 的硬件 BUG?

使用特权

评论回复
5
香水城| | 2010-7-23 12:32 | 只看该作者
楼主发一个测试程序让大家看看,否则谁知道你的操作是否正确?

使用特权

评论回复
6
airwill|  楼主 | 2010-7-24 12:33 | 只看该作者
报告楼上, 我也很想抓个很准确的特性, 然后写个测试程序,让大家看看.
只是感觉有点象 ic bug, 不容易抓准毛病点.
有一点可以肯定, 我没有关闭 DMA, 按照数据手册, 那么 CNDTR 是不能更改的.

使用特权

评论回复
7
香水城| | 2010-7-26 09:53 | 只看该作者
报告楼上, 我也很想抓个很准确的特性, 然后写个测试程序,让大家看看.
只是感觉有点象 ic bug, 不容易抓准毛病点.
有一点可以肯定, 我没有关闭 DMA, 按照数据手册, 那么 CNDTR 是不能更改的. ...
airwill 发表于 2010-7-24 12:33


请仔细看看STM32参考手册,使能DMA通道之后,CNDTR变为只读,随时反映当前还剩多少次传输,所以你观察到的现象并没有错,更不是什么Bug。

STM32_DMA_CNDTRx.GIF (18.86 KB )

STM32_DMA_CNDTRx.GIF

使用特权

评论回复
8
airwill|  楼主 | 2010-7-26 14:58 | 只看该作者
谢谢, 楼上的确看得很仔细.

不过在发帖前, 我也详细看过这部分的介绍了.
我的问题是:
"现在发现, 在工作过程中,  DMA1 的 通道1 的 CNDTR 由 4 莫名其妙地 变成了 2.
当然采样的数据也发生了错误. 我调试中发现, 前后两通道的数据(DMA 后的内存数据)对调了. "

开始也以为 这个计数器会变属于正常情况, 然而我跟踪了好久, 这个 2 始终没有变为4 去, 因为规则采样, 应该没有几个 uS 就会变回去, jlink 在 MDK 下作怪吗? 不用调试器, 照样出错.
另外更加糟糕的是: 采样到的数据发生了错误(这是最关键的, 前面只是说的现象)

另外没有说明, 我手工改回到 4, 又正常采样了.
谢谢!

使用特权

评论回复
9
香水城| | 2010-7-26 15:05 | 只看该作者
你不能给出测试程序,让别人怎么能够帮助你呢?

使用特权

评论回复
10
yaobb1981| | 2010-7-26 16:08 | 只看该作者
我也碰到此问题
运行运行一段时间后,DMA的数据就会出错,但马上又会恢复,此问题一直未解决。

使用特权

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

本版积分规则

556

主题

17719

帖子

884

粉丝