前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ESP8266开发 蓝灯闪烁 开发板复位重启

ESP8266开发 蓝灯闪烁 开发板复位重启

原创
作者头像
longdany
发布2023-12-14 17:25:53
4700
发布2023-12-14 17:25:53
举报
文章被收录于专栏:地平线RDK_X3派地平线RDK_X3派

问题:蓝灯闪烁

程序烧录进入后观察开发板 发现esp8266模块蓝灯间隔几秒后闪烁一次

分析:开发板自动复位

我使用的是esp8266中SPI功能

代码语言:c
复制
#include <SPI.h>
#define CS 5

void setup() {
    // put your setup code here, to run once:
    SPI.begin();
    SPI.beginTransaction(SPISettings(10, MSBFIRST, SPI_MODE0));
    pinMode(CS, OUTPUT);
    digitalWrite(CS, HIGH);
}
void loop()
{
    int i = 0, j = 0;
    byte flag = 0b00001010;
    while(1)
    {
        digitalWrite(CS, LOW);
        SPI.transfer(flag);
        digitalWrite(CS, HIGH);
        i++;
    }
}

使用示波器查看SPI时钟波形

黄色SPI时钟线
黄色SPI时钟线

在程序loop()中添加delay()函数后示波器时钟波形在固定间隔几秒后两秒左右延迟的低电平持续

代码语言:c
复制
void loop()
{
    int i = 0, j = 0;
    byte flag = 0b00001010;
    delay(2000);
    while(1)
    {
        digitalWrite(CS, LOW);
        SPI.transfer(flag);
        digitalWrite(CS, HIGH);
        i++;
    }
}

分析发现虽然在while(1)执行了死循环,但是loop()依然在不断执行,原因为在死循环中没有喂狗语句,看门狗不断复位开发板,程序不断执行loop(),最简单的方法为在while中添加delay()方法,delay方法会自动喂狗

代码语言:c
复制
void loop()
{
    int i = 0, j = 0;
    byte flag = 0b00001010;
    while(1)
    {
        digitalWrite(CS, LOW);
        SPI.transfer(flag);
        digitalWrite(CS, HIGH);
        delay(100);
        i++;
    }
}

这样开发板就不会因为看门狗不断复位,正常的喂狗语句是

代码语言:c
复制
ESP.wdtFeed();

观察效果发现,蓝灯不再间隔闪烁,不断复位问题解决

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题:蓝灯闪烁
  • 分析:开发板自动复位
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档