数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 133|回复: 1

[C51] 升级用SP3232芯片做的STC单片机烧录线用于ESP32C2模块的自动下载

[复制链接]
发表于 昨天 12:34 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
最近一直在玩这个1元钱的ESP32C2的小模块,每次烧录时不是要按住按键就是要连接线路来保持GPIO9的低电平状态弄的很烦,此前发帖:一元钱的ESP32-C2模块成功点亮板载LED指示灯
https://www.mydigit.cn/forum.php?mod=viewthread&tid=503038&fromuid=1505079 (出处: 数码之家)
有坛友:@devcang 回帖建议我用NODEMCU(ESP8266)底板上的自动下载电路来实现自动烧录,就在考虑制作方案时看到了桌上前段时间制作的SP3232串口烧录线,相到其上用于串口监控的8脚单片机芯片还有3个引脚可用,于是重新修改并下载了固件代码,使得每次检测到主回路有串口通讯操作后在为目标系统断电重启的同时I/O口P3.0输出一个2秒宽的低电平,用来控制ESP32模块的GPIO9引脚,上电测试升级后的下载线用来为ESP32C2或ESP8266烧录代码感觉非常稳定可靠,此后ESP32模块也可以和其他单片机一样的编译好程序后就自动下载了,再不用按键了。其实按照ESPxx的烧录规范还应该有对模块EN引脚(复位)的操作,但经过多次实验后发现在保持模块的使能状态下仅保证GPIO0(GPIO9)为低电平就能进入烧录模式,而我的这个烧录线本身具备自动断电、上电复位的操作,在为ESP32C2下载程序时同样也有再上电动作也相当于有EN复位操作了。
修改后的固件源码如下:
  1. #include "STC15.h"//MCU:STC15W204S-8Pin
  2. #include <intrins.h>
  3. //========================================
  4. sbit power_reset = P5 ^ 4; //引脚pin.1
  5. sbit flag_D = P3 ^ 3; //烧录/串口通讯设置端口
  6. sbit boot = P3 ^ 0; //烧录ESP8266或ESP32时控制GPIO0或GPIO9
  7. bit m;
  8. unsigned char n;
  9. //========================================
  10. void Delay_1ms(unsigned int t)//t毫秒@11.0592MHz
  11. {
  12.   unsigned char i, j;

  13.   while(t--)
  14.   {
  15.     _nop_();
  16.     _nop_();
  17.     i = 12;
  18.     j = 168;

  19.     do
  20.     {
  21.       while(--j);
  22.     } while(--i);
  23.   }
  24. }

  25. //====外部中断INT0响应COM口RTS信号中断函数========
  26. void INT0_ser()interrupt 0
  27. {
  28.   if(INT0 == 1)
  29.   {
  30.     m = 1;
  31.   }
  32.   else
  33.   {
  34.     m = 0;
  35.   }
  36. }
  37. //====主函数=======================================
  38. void main()
  39. {
  40.   P5M0 = 0x10;         //P5.4推挽输出
  41.   P5M1 = 0x00;

  42.   INT0 = 1;                                //P3.2口置1
  43.   IT0 = 0;                                //配置INT0响应上升沿&下降沿中断
  44.   EX0 = 1;                                //使能INT0中断
  45.   EA = 1;

  46.   power_reset = 0;//继电器失电、常闭接点为目标板供电
  47.   boot = 1;
  48.   flag_D = 1;                        //端口P3.3状态标志、拨动开关接通后flag_D=0否则flag_D=1
  49.   m = 0;

  50.   while(1)
  51.   {

  52.     if(m && flag_D)
  53.     {
  54.       EX0 = 0; //响应中断后关闭中断避免二次响应
  55.       m = 0;
  56.       power_reset = 1; //继电器吸合目标板单片机断电
  57.       Delay_1ms(750);//停电750ms后恢复供电
  58.       boot = 0;//拉低ESPxx的GPIO0或GPIO9引脚电平
  59.       power_reset = 0; //继电器断开目标板单片机得电复位
  60.       Delay_1ms(2000);
  61.       boot = 1;
  62.       EX0 = 1; //工作完成后恢复中断响应
  63.     }

  64.   }
  65. }
复制代码


打赏

参与人数 2家元 +60 收起 理由
jf201006 + 30 謝謝分享
飞向狙沙 + 30 優秀文章

查看全部打赏

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-7-22 13:34 , Processed in 0.187200 second(s), 10 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表