笑死,STC8G的I2C问题折腾三天,绝望的发帖前30秒解决……
本帖最后由 hyperma 于 2023-2-19 03:14 编辑我真的快疯了,买的2.23寸12832 OLED显示屏(不是模组),自己做的板子,打算把规划中的某机全部外部触发条件和显示屏内容,都用STC8G的大ROM装进去,但没想到在这个12832面前踢了铁板。
由于我是从STM8叛变过来的,对I2C一向自认很有信心,10K上拉电阻,10p退耦降噪电容,Open Drain驱动,用官方库函数,已经玩得不能再熟练了。但这回无论怎么写程序,就是没有显示啊!
示波器加逻辑分析仪一量,出现了奇怪的事情,连续发射多个字符后会出问题!I2C发射从机地址、寄存器地址,都OK,偏偏从第三组8bit数据开始出问题,缺一位!
怎么缺呢?比如我连续发射0x78,0x40,0x05这一组固定数据,从第三次开始,05开始变成04!就是说00000101变成了00000100!怎么折腾都这样,于是我折腾了三天。足足三天啊!换驱动、换成模拟I2C模式、降速,都不成……。
实在不行了,凌晨想上来发帖子求救,刚注册需要等两分钟……。唉,揉揉已经通红的眼睛看会儿帖子吧,偶然看到了版主的帖子里讲了输出的PP推挽模式,由于STM8内部上拉电阻非常弱,大概33-62k之间的样子,我一向基本不用,虽然知道STC有4k的上拉电阻,可以驱动晶体管拉动继电器了,但习惯上基本从未把芯片设置成PP模式,闲着也是闲着,初始化函数里改两个字母看看吧……。
OLED出图像了!我……
然后用逻辑分析仪抓了一下数据,正常了……。这是为什么啊!为什么啊!真心向版主求教,是否说STC8的准双向口可以省却外部上拉电阻了?还是说Open Drain模式的输出是有问题的?
I2C,MCU/外设如都工作在同一个电压,
I/O应设置在开漏或准双向口模式,不应设置在强推挽
估计投诚的新兄弟看错了设置
回长官,应该不会,我没有用寄存器配置,而是通用驱动里的GPIO配置函数。有通用驱动我是不会用寄存器的,毕竟跑过来就图个花天酒地……。 同电压的推荐准双向口或开漏,允许内部4K上拉或外挂5.1K上拉电阻。Open Drain模式的输入输出都没有任何问题。
楼主这种情况,示波器一看便知。看这种信号有时候用逻辑分析仪反而不好(特别是那种山寨的便宜货),看不了精细的信息。 所以说嘛,玩st的都玩糊涂了 回国参加革命不分早晚,能回来支援祖国建设都是好同志!
我改行搞思想建设已 N 年,各种新式武器已不亲自操作,估计还是害人弱智的库函数的通病
库函数不求甚解,设错了,多试几个组合能通过,就往下继续走了
明我请陈工在本贴讲下 库函数 I/O工作模式的设置
Open Drain模式的输出是有问题的?====要外部加上拉,或打开内部4K独立上拉电阻
准双向口/弱上拉====往往拉的速度不够快, 不够强 梁工 发表于 2023-2-19 10:54
同电压的推荐准双向口或开漏,允许内部4K上拉或外挂5.1K上拉电阻。Open Drain模式的输入输出都没有任何问题 ...
你好在这种状态下, 我是不需要外接电阻上拉是吧? 我这两天也遇到了这个问题, 调整了好几遍io口状态, 偶尔成功, 偶尔有不行了 我的I2C都是 开漏(OD)+上拉
不用强推挽(PP){:4_165:}