前段时间,我们公司做了一项目,用到了STM32 的IIC功能,主要是和eeprom--AT24C02通讯。开始时,领导要求使用硬件IIC因为这样的话,效率是比较高的,而且对其它进程的影响较少。于是就写了一个硬件IIC的程序,样品实验时,都是好的,通讯没问题,就这样我们放心的生产了。批量的时候,发现程序不能正常运行,去生成检查发现程序一直卡死在IIC读取数据阶段。经过多种实验,换eeprom,换MCU,换底板等等,有的可以正常通讯,大部分不行。程序会卡死,因为单片机总是检测到总线是忙碌状态,所以不会发送起始信号。
于是,我们就换成了软件IIC,而是使用软件IIC的时候必须注意,在等待回应时加上延时,时间一到跳出等待。这样避免程序死循环。附上一个例程,供大家学习。
IIC实验.zip
(58.46 KB)
|