最近使用了一个24C64,直接力创SMT的,型号是ST的M24C64-RMN6TP,MCU使用的STM32F407ZGT6,直接用的正点原子的例程,然后把宏定义24C02改为24C64,结果发现通讯不成功,把芯片焊接到原子开发板上发现也不成功。
百度发现有人说是SDA_OUT端口设置的问题,例程中应该是默认推挽输出,设置为开漏会好一些,实测果然,开发板通讯正常了。
例程源码:
#define SDA_OUT() {GPIOB->MODER&=~(3<<(9*2));GPIOB->MODER|=1<<9*2;} //PB9输出模式
改为如下:
#define SDA_OUT() {GPIOB->MODER&=~(3<<(9*2));GPIOB->MODER|=1<<9*2;\
GPIOB->OTYPER&=~(1<<9);GPIOB->OTYPER|=1<<9;} //PB5输出模式
----------------------------------------------------------------------------------------------------------------------------
但是但是,我的板子依然不行,读可以,写不行。
排查了其他代码的影响,那就是硬件有问题了。
这时,又看到一个帖子,说是IIC_STOP那时序有点问题,例程如下;
void IIC_Stop(void)
{
SDA_OUT();//sda线输出
IIC_SCL=0;
IIC_SDA=0;//STOP:whe

本文记录了使用STM32F407ZGT6进行I2C通信调试的过程,包括解决SDA_OUTPUT设置及IIC_STOP时序问题,并分析了硬件问题对通信的影响。
最低0.47元/天 解锁文章
3149

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



