野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5377|回复: 2

STM32F103的I2C程序一会错误一会又成功的问题

[复制链接]
发表于 2022-12-11 13:04:55 | 显示全部楼层 |阅读模式
我按视频写的程序,一开始调试成功了,向EEPROM写一个字节,读一个字节,都在串口实现了。
说明程序正确没问题。

然后开始调程序,想 换一下 试一下 各个语句的各种情况适不适用。
比如把  “I2C_GenerateSTOP( I2C1 , ENABLE );”  这个语句放在IIC协议时序的不同地方,想看看效果。

视频例程 “I2C_GenerateSTOP( I2C1 , ENABLE );”  是写在读最后一个字节之前,运行成功。
我也试过,写在读最后一个字节前、后,程序都能成功运行。

也就是程序没有问题。

但有时候的情况是,比如刚才下载程序到开发板,能实现,
然后改一下语句,突然程序就进入死循环了。
即使这个时候改回去,仍然超时运行不成功。
这个时候下载配套视频例程,也都超时失败。如图。
配套例程肯定是正确的。

这时,必须要分别打开不同的配套例程,下载,多下载几次,直到例程运行成功。
这个时候再换 自己写的程序,一下载,就正确读写成功了。

感觉上就是I2C总线一直被占用,时序不对一样。
所以,是stm32f103自己的I2C的问题,还是程序的问题?

有没有比较特别完善的程序,能排除所有这种总线占用、进入死循环的方法?
我试过每次读写前,先恢复默认设置,比如“I2C_DeInit(I2C1);”也没用。清除FLAG标志位,也没用。
有时好用有时无效。

就比如,配套例程应该来说也没问题吧。但一旦超时一次,就要打开不同程序下载多次,I2C才能正常运行。

无1标题.png
回复

使用道具 举报

发表于 2022-12-12 07:59:23 | 显示全部楼层
我试试看你的问题,没有测试过。
回复 支持 反对

使用道具 举报

发表于 2023-1-12 16:37:40 | 显示全部楼层
有可能是触发了中断
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 11:51 , Processed in 0.030931 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表