stm32f103 I2C DMA方式使用失败

作者尝试使用DMA方式提升STM32硬件I2C的性能,但在实际操作中遇到问题。主要表现为HAL_I2C_Master_Transmit_DMA与HAL_I2C_Master_Receive_DMA函数调用时出现总线繁忙的情况,以及HAL_I2C_Mem_Read_DMA无法正确读取值。已检查中断设置并确认逻辑分析仪显示数据已发送。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

正常使用STM32硬件I2C没有问题,本想尝试更好的方法比如DMA方式,却失败了。

这个问题已经看了两天了,思路也有很多,但都没能解决问题

1.该开的中断都已经开启比如DMA通道的中断,I2C事件中断都开启。

2.调用        

ret[4] = HAL_I2C_Master_Transmit_DMA(&hi2c1, Buf[4], Buf+6, 1);
i2cState = HAL_I2C_Master_Receive_DMA(&hi2c1, Buf[4], &ret[7], 1);

第二次读总是会返回BUSY,就是说还没发送完的感觉,但从逻辑分析仪上看是发送完了的。

3.还有HAL_I2C_Mem_Read_DMA调用这个接口,从逻辑分析仪上看波形,读取的寄存器的值都是对的,但传进去的参数却还是没有读到正确的值。


HAL库的版本也更新到最新的1.6.0

官方HAL库的文档也看过了,都没有帮助


暂时先放弃了,以后有时间再看,先记录下。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值