发帖
4 0 0

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

触不可及
注册会员

8

主题

14

回帖

135

积分

注册会员

积分
135
ESP8266系列 10349 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();
}
//*********************************************************************






──── 0人觉得很赞 ────

使用道具 举报

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);
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
您需要登录后才可以回帖 立即登录
高级模式
返回
统计信息
  • 会员数: 28575 个
  • 话题数: 40660 篇