STM8S003的GPIO模拟I2C切换输入输出的解决办法

本文介绍了在STM8单片机中,使用GPIO模拟I2C时遇到的从输出切换到输入导致死机的问题。通过研究发现,部分管脚如D4、D5具有开漏特性,可以避免切换过程中的问题。解决方法是设置GPIO为开漏输出,外接上拉电阻,发送数据前先输出高电平,然后读取IO状态以检测ACK响应。文中给出了相关的I2C代码片段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚开始学STM8,很多东西刚了解,正在做一个温湿度显示小板,就是使用I2C驱动SHT20传感器,并显示到数码管,数码管用的四位一体共阴数码管,STM8管脚有限,添加了一片TM1650做驱动,不过SHT20和TM1650都是用的I2C接口,由于对STM8硬件I2C还不了解,先打算用软件模拟,这就涉及到需要对GPIO做输入输出切换处理来检测ACK响应,刚开始,直接操作DDR寄存器,但是出现从输出切换到输入就会出现单片机死机,不解,查资料,得到一个解决办法,在输出状态时,可以不用切换到输入,我使用管脚D4,D5这两个管脚,这两个管脚比较特殊,就是真正开漏,在管脚描述为T,其它描述为HS(高吸收电流)。


解决办法,将IO设置为开漏输出,外部加上拉,做输入使用之前先输出高,再读取IO状态,即可,附上I2C代码:

#include "swiic.h"

void Delay_us(uint8_t i) //nus 粗略延时
{
    for(; i>0; i--)
    {
        asm("nop");                
        asm("nop");  
        asm("nop");
        asm("nop");  
        asm("nop");
    }        
}

/*================================================================
【  Name  】void I2CInit(void)
【Function】I2C初始化,空闲状态
【  Notes 】
【 Author 】Jack
【  Data  】2012.08.07
=========================================
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值