ESP-01S无线下载器
2024-09-08 10:30:32
-项目概述-
最开始学习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 ,电平转换电路如下
最新文章
- 关于印发利用DEM确定耕地坡度分级技术规定(试行)的通知
- STM32F4读写内部FLASH【使用库函数】
- 【原】Linux Raid 实验
- CentOS6.5菜鸟之旅:安装rpmforge软件库
- MySQL远程访问授权
- C#学习笔记(第1周作业)
- 如何计算IP地址及CIDR(收藏)
- MySQL ibdata1撑爆占满磁盘空间
- java实现.net中的枚举
- .NET基础拾遗(3)字符串、集合和流3
- SaltStack Job管理
- [Bayesian] “我是bayesian我怕谁”系列 - Gaussian Process
- 【笔记】nodejs读取JSON,数组转树
- 对Javascript到底了解多少,一测便知道
- 使用原生JS定位网页元素
- SpringCloud系列——SSO 单点登录
- 转:图解C#的值类型,引用类型,栈,堆,ref,out
- MySQL免安装版错误解决方案
- cp显示进度条
- VS2013 未找到与约束。。。
热门文章
- vue+spirngboot 分离技术实现图书信息的增删改查(改造这学期的课程设计【1】)
- 22.-CSRF攻击
- Windows7下驱动开发与调试体系构建——1.驱动开发的环境准备
- 十七、Job与Cronjob
- 中小型企业综合项目(Nginx+LVS+Tomcat+MGR+Nexus+NFS)
- Appscan安全扫描问题-会话检测失败
- Asp.Net Core6.0中MediatR的应用CQRS
- 如何正确遵守 Python 代码规范
- tomcat报Address localhost:1099 is already in use
- Aspose.Cells设置单元格背景色不生效