请选择 进入手机版 | 继续访问电脑版

ESP8266使用IIC通信时看门狗溢出

[复制链接]
查看3518 | 回复4 | 2021-4-8 22:08:37 | 显示全部楼层 |阅读模式
如题,使用IIC驱动0.96寸的OLED显示屏,我在定时器里面每个2S调用一次这个函数,每次调用就会导致看门狗复位,是IIC的通信速率太慢了,还是软件存在有其他问题。
那个大佬能帮忙看下。


//*********************************************************************
//OLED全屏显示
//*********************************************************************
void OLED_Fill(unsigned char bmp_dat)
{
        unsigned char y,x;
        for(y=0;y<8;y++)
        {
//                system_soft_wdt_feed();                //此处喂狗,则看门狗不会溢出

                OLED_WrCmd(0xb0+y);
                OLED_WrCmd(0x01);
//                OLED_WrCmd(0x00);
                OLED_WrCmd(0x10);
                for(x=0;x<128;x++)
                i2c_master_writeByte(bmp_dat);
        }
}
//*********************************************************************





//*********************************************************************
//OLED写入指令
//*********************************************************************
bool OLED_WrCmd(unsigned char IIC_Command)
{
        uint8 ack = 0;
        i2c_master_start();
        //******************************************************
        i2c_master_writeByte(0x78);            //Slave address,SA0=0
        ack = i2c_master_getAck();
        if(ack)
        {
                os_printf("addr not ack when tx write cmd \n");
                i2c_master_stop();

                return false;
        }
        //******************************************************
        i2c_master_writeByte(0x00);                        //write command
        ack = i2c_master_getAck();
        if(ack)
        {
                os_printf("addr not ack when tx write cmd \n");
                i2c_master_stop();

                return false;
        }
        //******************************************************
        i2c_master_writeByte(IIC_Command);
        ack = i2c_master_getAck();
        if(ack)
        {
                os_printf("addr not ack when tx write cmd \n");
                i2c_master_stop();

                return false;
        }
        //******************************************************
        i2c_master_stop();
}
//*********************************************************************






回复

使用道具 举报

触不可及 | 2021-4-8 22:21:36 | 显示全部楼层
定时器定时时间是准确的,显示屏是SSD1306
回复

使用道具 举报

回复

使用道具 举报

触不可及 | 2021-4-10 08:14:32 | 显示全部楼层
AiThinker-半颗心脏 发表于 2021-4-9 08:36
您可以看看这个开源DEMO:https://github.com/xuhongv/StudyInEsp8266/tree/master/48_ESP8266_RTOS3.0_OLE ...

多谢大佬,昨天倒腾到大半夜,问题解决了。两个问题:
1.模拟IIC通信速率确实有点慢,刷新一次显示屏的时间很久(多长时间没计算),按我原来10mS刷一次,肯定会导致看门狗溢出。
2.另外一个就是我软件上的问题了:
                for(x=0;x<128;x++)
                 i2c_master_writeByte(bmp_dat);
这里应该是:OLED_WrData(bmp_dat);
回复

使用道具 举报

LZJ_PLsLw | 2021-6-9 09:32:47 | 显示全部楼层
AiThinker-半颗心脏 发表于 2021-4-9 08:36
您可以看看这个开源DEMO:https://github.com/xuhongv/StudyInEsp8266/tree/master/48_ESP8266_RTOS3.0_OLE ...

您好,我有一个关于LoRa Ra-02模组的问题,麻烦您解答一下。http://bbs.ai-thinker.com/forum.php?mod=viewthread&tid=42
回复

使用道具 举报

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

本版积分规则

8

主题

22

帖子

135

积分

注册会员

Rank: 2

积分
135