Stm32软件模拟IIC驱动OLED异常

在学习IIC驱动OLED的过程中,发现编写的代码无法正常显示。使用逻辑分析仪检查后,问题定位到IIC停止信号的生成,存在额外的开始信号。在停止信号函数中,SDA应在SCL变为高电平时下降,但代码执行顺序相反,导致了错误的IIC信号。调整代码顺序应能解决此问题。
摘要由CSDN通过智能技术生成

题主在学习IIC驱动OLED过程中,模仿例程的逻辑编写好代码,程序几乎一致但是OLED啥也显示不出来。通过查询资料选择用逻辑分析仪分析IIC时钟线和数据线的时序信号,检查具体是哪里出了问题。

 时序图显示在每次模拟IIC生成停止信号时,都会多出来一个开始信号,导致IIC信号传输异常,之后具体查询这部分代码。

/**
 * 功能:发起IIC停止信号
 * 参数:None
 * 返回值:None
 */
void stopIIC(void)
{
    IIC_SDA_OUT();
    IIC_SCL_H();
	IIC_SDA_L();
    Delay_us(IIC_SPEED);
    IIC_SDA_H();            //SCL高电平期间,产生SDA下降沿
    Delay_us(IIC_SPEED);
    IIC_SCL_L();
}

检查过后发现在在SDA转为输出之后,应该先拉低SDA后拉高SCL。题主猜测如果按照上面的程序逻辑,在发起停止信号前,SDA为高电平, 这时候先拉高SCL再拉低SDA,就会再SCL高电平期间实现SDA的下降沿,就产生了起始信号,而反过来就会避免这种情况发生。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值