完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
阻塞版本 (HAL_I2C_Mem_Write) 运行良好,现在我正在尝试使用 HAL_I2C_Mem_Write_DMA。以下是配置工具中给出的设置。
配置器生成的结果代码(为简洁起见,我删除了一些注释):
缓冲区大小为 128 字节。 当我在回调中放置断点时,断点被成功触发。 HAL_I2C_Mem_Write_DMA 返回 HAL_OK。当我走进它时,这是它返回前的状态: 请注意,XferCount 以 128 开始。 这是我的逻辑分析器的视图,首先是阻塞(非 DMA)调用的结果: 现在 DMA 版本的结果: 仅发送 MemAddress (0x40)。数据缓冲区似乎被完全忽略了。 当我在回调中放置断点时,XferCount 变为零,State 和 Mode 分别为“ready”和“none”。据我所知,这是正常操作应该发生的情况。 唯一运行的是一个非常简单的计时器(未启用通道),用于每 20 毫秒触发一次 I2C 调用。当用非阻塞版本测量时,数据传输需要 3.2ms,所以应该有足够的空闲时间。 所以我不知道为什么没有发送缓冲区本身。任何的意见都将会有帮助。 |
|
相关推荐
1个回答
|
|
好的,我终于想通了。配置工具正在生成这样的调用:
我认为问题在于我首先配置了没有任何 DMA 的 I2C,然后又回来启用 DMA 设置。当您启用更多功能时,该工具只会将任何新需要的调用附加到生成列表的末尾。 不幸的是,每次我在此之后生成代码时,配置工具也会继续以错误的顺序持续重新安排这些调用。解决方案似乎是这样的:
所以我在这里浪费了 6 个小时,但仍然可能比没有配置工具的时间少。很高兴看到这个问题在某个时候得到解决。 |
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2644 浏览 1 评论
3209 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1784 浏览 1 评论
3613 浏览 6 评论
5990 浏览 21 评论
940浏览 4评论
1317浏览 4评论
在Linux上安装Atollic TRUEStudio的步骤有哪些呢?
585浏览 3评论
使用DMA激活某些外设会以导致外设无法工作的方式生成代码是怎么回事
1304浏览 3评论
1362浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 18:10 , Processed in 1.282926 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号