ESP-01S无线下载器

 

-项目概述-

最开始学习51的时候,总是“冷启动”,手动按动开关重启,下载一次程序重启一次,觉得很麻烦

而且另一方面,我的最小系统板是有自带电源的,那么这根数据线也显得有些多余了,于是打算做一个“无线自动烧录器”。

目的:

  •  程序发送特定重启指令实现“热启动”。
  • ESP-01S作为无线串口使用。
  • 烧录器端口指定。

材料清单:51系统板一块(STC8G1K08),ESP-01S模块两个(收发),CH340G下载模块

注意:我用的是51单片机是STC8G系列,对于老版本的STC89C52能否使用特定指令重启,需要自己去查看数据手册,具体位置下面会提到。

 

-成品预览-

 

-项目框架-

这个项目硬件逻辑很简单,主要在于特定指令重启这一块,查阅文档很麻烦,整体流程如下:

 

-硬件资料,代码-

  • ISP软复位方法:

    根据STC8G芯片文档(下文文末):

                

    一共有四种方法,这里我选择串口特定指令检测复位,其余方法可以自己查阅文档调试。

    关键代码:

  • IAP_CONTR = 0x60; //复位到系统区
  • #include "reg51.h"
    #include "intrins.h"
    #define FOSC 11059200UL
    #define BR115200 (65536 - FOSC / 4 / 115200)
    sfr IAP_CONTR = 0xc7;
    sfr AUXR = 0x8e;
    sfr P3M0 = 0xb2;
    sfr P3M1 = 0xb1;
    char stage;
    
    /*
    每一次读取一个字符,当当前字符满足要求,(每一个case的if语句作用)
    就判断下一位是否满足要求,如果全部满足,(每一行stage作用)
    就执行跳转指令。如果当中有一位不满足,
    就从新跳转到第一位,重新进行判断。(go to 语句作用)
    */
    void UartIsr() interrupt 4 //串口中断服务程序
    {
        char dat;
        if (TI)
        {
            TI = 0;
        }
        if (RI)
        {
            RI = 0;
            dat = SBUF;
            switch (stage)
            {
                case 0:
                default:
                L_Check1st:
                if (dat == 'S') stage = 1;
                else stage = 0;
                break;
                
                case 1:
                if (dat == 'T') stage = 2;
                else goto L_Check1st;
                break;
                
                case 2:
                if (dat == 'C') stage = 3;
                else goto L_Check1st;
                break;
                
                case 3:
                if (dat == 'I') stage = 4;
                else goto L_Check1st;
                break;
                
                case 4:
                if (dat == 'S') stage = 5;
                else goto L_Check1st;
                break;
                
                case 5:
                if (dat == 'P') stage = 6;
                else goto L_Check1st;
                break;
                
                case 6:
                if (dat == '$') //当检测到正确的用户下载命令时
                IAP_CONTR = 0x60; //复位到系统区
                else goto L_Check1st;
                break;
            }
        }
    }
    void main()
    {
        P3M0 = 0x00;
        P3M1 = 0x00;
        SCON = 0x50;
        TMOD = 0x00;
        AUXR = 0x40;
        TH1 = BR115200 >> 8; //设置串口波特率为 115200
        TL1 = BR115200;
        TR1 = 1;
        ES = 1;
        EA = 1;
        stage = 0;
        while (1)
        {
        }
    }

   

项目全部文件:

个人博客下方私信领取

http://potatoworld.top:5800/

最后,下载成功,非常nice ~

 

 

-项目槽点-

  • 对于STC新系列的单片机,串口寄存器相关的配置还是交给软件去做吧,想要自己配置练练手的拿STC89系列就够了

      切记。新系列需要配置AUXR寄存器,具体配置方式查看数据手册,也可以STC烧录器自带的

    

  • 注意电平转换,5V转3.3V ,电平转换电路如下

  

 

posted @ 2023-01-17 21:02  北極星  阅读(457)  评论(0编辑  收藏  举报