STM32CubeIDE实战:I2C从机+DMA通信的五大陷阱与解决方案
1. 从机地址配置:那些容易被忽略的细节
第一次在STM32上配置I2C从机时,最令人困惑的莫过于地址设置。与主机模式不同,从机地址的配置涉及多个层面的考量:
- 7位地址与8位地址的混淆:I2C标准定义的是7位地址,但在传输时会加上1位读写标志位。许多开发者会错误地将7位地址直接左移一位作为从机地址配置。实际上,STM32的从机地址寄存器(如I2C_OAR1)需要填入的是7位地址本身,硬件会自动处理读写位的添加。
// 错误示例:将7位地址0x15左移后配置
LL_I2C_SetOwnAddress1(I2C1, 0x15 << 1, LL_I2C_OWNADDRESS1_7BIT);
// 正确配置:直接使用7位地址
LL_I2C_SetOwnAddress1(I2C1, 0x15, LL_I2C_OWNADDRESS1_7BIT);
- 地址匹配中断的触发条件:当主机发送的地址与从机配置的地址匹配时,会触发ADDR中断。但要注意,这个地址包含读写位。如果从机只支持接收(写)操作,而主机发送的是读请求,地址虽然匹配但后续通信会失败。
提示:调试时可以在ADDR中断中检查LL_I2C_GetTransferDirection(),确认主机请求的是读还是写操作。
2. DMA配置陷阱:循环模式与单次模式的抉择
DMA的循环模式(Circular)和单次模式(Normal)在I2C从机通信中会产生截然不同的效果:
| 模式 | 适用场景 | 潜在问题 | 解决方案 |
|---|---|---|---|
| 循环模式</ |

1万+

被折叠的 条评论
为什么被折叠?



