梁工 发表于 2023-11-21 18:40:26

peitianyu 发表于 2023-11-21 17:44
你好在这种状态下, 我是不需要外接电阻上拉是吧? 我这两天也遇到了这个问题, 调整了好几遍io口状态, 偶尔 ...

同系统电压的,准双向口+内部上拉4K。

hhh402 发表于 2023-11-21 19:09:30

请问为什么推挽不行?是因为速度不行吗?如果使用PWM,IO可以设置成推挽和双向加上拉有什么区别?

peitianyu 发表于 2023-11-22 09:55:00

梁工 发表于 2023-11-21 18:40
同系统电压的,准双向口+内部上拉4K。

您好, 我是两边都是stc8g1k, 一个用于主机一个用于从机, 两边都得是准双向+内部上拉吗?

梁工 发表于 2023-11-22 10:03:36

peitianyu 发表于 2023-11-22 09:55
您好, 我是两边都是stc8g1k, 一个用于主机一个用于从机, 两边都得是准双向+内部上拉吗? ...

一般主机上拉即可,当然,两边都上拉也可以。

peitianyu 发表于 2023-11-22 10:05:12

梁工 发表于 2023-11-22 10:03
一般主机上拉即可,当然,两边都上拉也可以。

感谢感谢

iqny2004 发表于 2023-11-28 00:57:56

谢谢分享{:4_174:}

idea233 发表于 2023-12-4 16:56:23

刚刚点灯前来学习

hustc 发表于 2023-12-5 13:18:46

找不同,哪里不同改哪里

zanfi 发表于 2025-1-24 15:43:40

hhh402 发表于 2023-11-21 19:09
请问为什么推挽不行?是因为速度不行吗?如果使用PWM,IO可以设置成推挽和双向加上拉有什么区别? ...

这个是i2c的基础工作原理“线与”决定的,主机或者从机释放总线后,可以读,但不能干扰总线电平状态,因为需要交给其他设备发送数据。
因此,mcu引脚强下拉、无上拉的开漏输出模式,通过在外部设置上拉电阻配合;以及51的强下拉、弱上拉(mcu内部上拉电阻)的准双向口模式,是合适的。将io口电平设置为1就是释放总线,由于上拉电阻阻值大,总线具体是什么电平状态,由上拉电阻和外部设备决定。换句话就是,总线电平状态由其他设备发送数据拉低,而不受这两种上拉电阻影响。
而推挽模式是强上拉,设置为1释放总线后,其他设备如果下拉能力不足,可能无法将总线电平拉低,从而无法正确发送数据。如果其他设备下拉能力足够,又会导致mcu引脚输出电流大,存在烧毁端口的风险。
菜鸟之言,仅供研讨。

zanfi 发表于 2025-1-24 16:26:02

zanfi 发表于 2025-1-24 15:43
这个是i2c的基础工作原理“线与”决定的,主机或者从机释放总线后,可以读,但不能干扰总线电平状态,因 ...

对于楼主遇到的问题,我估计楼主外部电阻设置也是10k,是阻值太大的原因,一般设置为4.7k、5.1k不会出问题,再将端口设置为开漏输出或者准双向口模式,应该就解决了。如果是准准双向口,内部上拉电阻加4k,外部电阻用4.7k,并联电阻2.1k,也符合i2c规范定义的高速i2c上拉电阻(印象中是2k)的要求。
我之前自己做0.96寸oled模块,上拉电阻刚开始用的10k,不亮屏,改成4.7k就亮了。
页: 1 [2]
查看完整版本: 笑死,STC8G的I2C问题折腾三天,绝望的发帖前30秒解决……