我还想请教一下,你说“你开启DMA,对应的dam中断就会被开启。。但是,这个不是这个外设的中断。。。别混肴 ...
这个是我这个帖子的cube工程里NVI I2C的截图,默认是cube自动勾选的,我在cube里无法修改的。。也就是说,我配置了i2c dma接收数据,那么cube就自动帮我开启了对应的dma通道中断。。。
这个是我修改后的 Rx Tx的截图
应该是不同系列的cube的配置方案不同。。如果cube没有自动配置对应的dma通道中断,那只能自己手动打勾。。。
Paderboy 发表于 2017-3-30 18:03
这个是我这个帖子的cube工程里NVI I2C的截图,默认是cube自动勾选的,我在cube里无法修改的。。也就是 ...
谢谢你的回复,我又看了一下,发现了一个问题,我之前的cube版本是4.18,结果配置时就出现了10楼的截屏。后来我把cube升级到最新的4.20 就出现了你在11楼的截屏。
也就是说,4.20把dma的interrupt给打钩了,我们要做的就是把event interrupt打钩。
这样 在i2c的callback里面写回调程序就可以了。
另外还有个问题,就是dma接受时的dma buffer大小和mode中normal circular的问题。
这个问题是由于在uart接收中,比如一帧10bytes,某种原因受到干扰,这着一帧数据有丢失了几个byte,比如受到9bytes,那么是不是dma就是在那里等着,直到下次再来一帧时,凑够10bytes就触发中断?但是问题是下一帧本来的10bytes,被前一次的dma用掉了一个byte,就剩下9个bytes,这就全乱了。这个问题如何解决?是不是有个dma计数器定时清理的机制呢?
本帖最后由 Paderboy 于 2017-3-31 12:07 编辑
zhang_mike2000 发表于 2017-3-31 10:46
谢谢你的回复,我又看了一下,发现了一个问题,我之前的cube版本是4.18,结果配置时就出现了10楼的截屏。 ...
1.用串口中断空闲标志+dma接收(接收数据,但是接收的buff要尽量的大一些,然后自己判断数据是否可用。)
2.串口超时关闭接收(超过设置时间,就关闭接收,复位相关的标志位后继续接收)
很钦佩楼主的开源精神 谢谢楼主分享,学习了 讲述的很细致,学习了,谢谢楼主分享了 不错!适合初学者学习。 现在再用标准库做 这个必须赞一下! 谢谢楼主,下载参考参考
页:
1
[2]