你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32的GPIO中断开启DMA读取数据发生移位怎么解决?

[复制链接]
ST社区自助问题 提问时间:2017-5-8 15:34 /
设置PC6为上升沿触发中断,触发后中断回调函数开启DMA读取9个数据,然后下降沿时关闭DMA,但是读取到的数据会发生右移,这是什么原因,怎么解决呢?

中断回调函数

中断回调函数

读取到的数据

读取到的数据
收藏 1 评论8 发布时间:2017-5-8 15:34

举报

8个回答
any012 回答时间:2017-5-8 17:00:31
本帖最后由 any012 于 2017-5-9 08:44 编辑

感谢帮我发求助帖,补充下问题描述。
接收到正确的数据是: Spi2 DMA recived OK. 3a08, 010a, 0200, 01ff, 03ff, 07ff, 0fff, 5d71, 0000
出错时有时是这样的: Spi2 DMA recived OK. 03a0, 8010, a020, 001f, f03f, f07f, f0ff, f5d7, 1000
这样是最后一个16位数据跑到了第一个位置,其他的依次后移了。算是右移了2个字节。

我用示波器表笔碰触SCL管脚,有时候出现右移1个字节的情况。
但也有时候出现的数据较乱,感觉像是移动了几个bit,而不是整个字节。


PC6上升沿和下降沿都离MOSI数据产生有很大的时间间隔。

SPI2初始化函数:
QQ图片20170508165517.png

QQ图片20170509084249.png


fury-roar 回答时间:2017-5-8 17:30:37
开启dma之前,试试将dma_req信号清除。具体dma_req信号对应的寄存器查看响应手册。
waiman 回答时间:2017-5-9 09:58:57
楼主是用什么编程环境(编写软件)配色很cool
any012 回答时间:2017-5-9 10:16:48
本帖最后由 any012 于 2017-5-9 11:44 编辑
waiman-156411 发表于 2017-5-9 09:58
楼主是用什么编程环境(编写软件)配色很cool

eclipse+ac6插件。
然后eclipse市场里有各种主题。

eclipse装上AC6插件后,可以打开CUBEMX生成的SW4STM32工程。
eclipse界面挺好的,不过使用上遇到问题的话,就不知道该去哪里求助了,现在用AC6的还比较少。
下载安装AC6也挺慢的,尝鲜是需要付出代价的。
waiman 回答时间:2017-5-9 10:42:06
any012 发表于 2017-5-9 10:16
eclipse+ac6插件。
然后eclipse市场里有各种主题。

先谢谢你,可以直接用Eclipse打开 STM32 CubeMx生成的工程吗?
any012 回答时间:2017-5-9 10:53:33
fury-roar 发表于 2017-5-8 17:30
开启dma之前,试试将dma_req信号清除。具体dma_req信号对应的寄存器查看响应手册。 ...

DMA_REQ信号是什么?是说DMA_ISR吗?
any012 回答时间:2017-5-9 11:12:51
本帖最后由 any012 于 2017-5-9 11:45 编辑

希望朋友们帮忙分析下原因及解决办法。
fury-roar 回答时间:2017-5-9 14:43:47
本帖最后由 fury-roar 于 2017-5-9 14:47 编辑
any012 发表于 2017-5-9 10:53
DMA_REQ信号是什么?是说DMA_ISR吗?

不是dma_isr.
你的问题是不是:
dma搬移的第一个数据错误,有效数据从第二个开始?
spi准备好数据,请求dma搬数前,会将信号dma_req置为有效值,然后dma开始数据的搬移。你这种情况是不是dma使能后,此时SPI还未准备好数据但dma_req信号为有效值,导致dma错误地搬移了一个数据。可以在dma使能前,先将dma_req信号置为无效值将其清除。
你在spi相应的寄存器中找找看,有没有关于dma_req的描述。

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版