前些天赶时间用硬的I2c1驱动a,b,c.
a和b可以通信,就c不行,
而b和c只是数据的定义不同,其它的都相同,碰到这个问题
调试了几个小时,还是没调通,反而烧了硬件I2c(SDA始终是高电平),痛苦.不得已,只好用模拟的,调通了.
今天正好有点空,想想有硬的不用,太不甘心了.
于是冒着生命危险
,继续用I2C2,而,又出现了预想不到的问题:
c通信4次后通信第5次卡在了
/* Test on EV5 and clear it */
I2C_CheckEvent(I2CX, I2C_EVENT_MASTER_MODE_SELECT); 上
这里是检查SR1=0x01 和 SR2 = 0x03
见鬼在此处下断点后又跑过去了.
重来,不下断点还是卡在此处,一下断点有跑过去了.
没办法,在观察得寄存器的值,设置两个全局变量,保存SR1和SR2的值
在来,下断点,终于发现寄存器的值不对了:
SR1=0x41(错误),SR2=0x03(正确)
SR1=0x41,说明接收寄存器非空,见鬼了,接收到的是0xff
后来忽略此处,发现可以和b和c通信
百思不得其解!