7

ESP-01S无线下载器 - 北極星

 1 year ago
source link: https://www.cnblogs.com/polaris07/p/17058702.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

ESP-01S无线下载器

-项目概述-

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

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

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

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

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

-成品预览-

2282112-20230117201415995-233985265.png
2282112-20230117201434287-1103462233.png
2282112-20230117201536380-710800868.png
2282112-20230117201558024-1414732548.png

-项目框架-

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

2282112-20230117202407114-2012156623.png

-硬件资料,代码-

  • ISP软复位方法:

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

                2282112-20230117202932584-606015006.png

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

    关键代码:

  • 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 ~

2282112-20230117210105726-1304637500.png

-项目槽点-

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

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

    

2282112-20230117205105813-1713868312.png
  • 注意电平转换,5V转3.3V ,电平转换电路如下

  

2282112-20230117205723018-1799022219.png

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK