我按视频写的程序,一开始调试成功了,向EEPROM写一个字节,读一个字节,都在串口实现了。
说明程序正确没问题。
然后开始调程序,想 换一下 试一下 各个语句的各种情况适不适用。
比如把 “I2C_GenerateSTOP( I2C1 , ENABLE );” 这个语句放在IIC协议时序的不同地方,想看看效果。
视频例程 “I2C_GenerateSTOP( I2C1 , ENABLE );” 是写在读最后一个字节之前,运行成功。
我也试过,写在读最后一个字节前、后,程序都能成功运行。
也就是程序没有问题。
但有时候的情况是,比如刚才下载程序到开发板,能实现,
然后改一下语句,突然程序就进入死循环了。
即使这个时候改回去,仍然超时运行不成功。
这个时候下载配套视频例程,也都超时失败。如图。
配套例程肯定是正确的。
这时,必须要分别打开不同的配套例程,下载,多下载几次,直到例程运行成功。
这个时候再换 自己写的程序,一下载,就正确读写成功了。
感觉上就是I2C总线一直被占用,时序不对一样。
所以,是stm32f103自己的I2C的问题,还是程序的问题?
有没有比较特别完善的程序,能排除所有这种总线占用、进入死循环的方法?
我试过每次读写前,先恢复默认设置,比如“I2C_DeInit(I2C1);”也没用。清除FLAG标志位,也没用。
有时好用有时无效。
就比如,配套例程应该来说也没问题吧。但一旦超时一次,就要打开不同程序下载多次,I2C才能正常运行。
|