|
爱科技、爱创意、爱折腾、爱极致,我们都是技术控
您需要 登录 才可以下载或查看,没有账号?立即注册
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复位操作了。
修改后的固件源码如下:
- #include "STC15.h"//MCU:STC15W204S-8Pin
- #include <intrins.h>
- //========================================
- sbit power_reset = P5 ^ 4; //引脚pin.1
- sbit flag_D = P3 ^ 3; //烧录/串口通讯设置端口
- sbit boot = P3 ^ 0; //烧录ESP8266或ESP32时控制GPIO0或GPIO9
- bit m;
- unsigned char n;
- //========================================
- void Delay_1ms(unsigned int t)//t毫秒@11.0592MHz
- {
- unsigned char i, j;
- while(t--)
- {
- _nop_();
- _nop_();
- i = 12;
- j = 168;
- do
- {
- while(--j);
- } while(--i);
- }
- }
- //====外部中断INT0响应COM口RTS信号中断函数========
- void INT0_ser()interrupt 0
- {
- if(INT0 == 1)
- {
- m = 1;
- }
- else
- {
- m = 0;
- }
- }
- //====主函数=======================================
- void main()
- {
- P5M0 = 0x10; //P5.4推挽输出
- P5M1 = 0x00;
- INT0 = 1; //P3.2口置1
- IT0 = 0; //配置INT0响应上升沿&下降沿中断
- EX0 = 1; //使能INT0中断
- EA = 1;
- power_reset = 0;//继电器失电、常闭接点为目标板供电
- boot = 1;
- flag_D = 1; //端口P3.3状态标志、拨动开关接通后flag_D=0否则flag_D=1
- m = 0;
- while(1)
- {
- if(m && flag_D)
- {
- EX0 = 0; //响应中断后关闭中断避免二次响应
- m = 0;
- power_reset = 1; //继电器吸合目标板单片机断电
- Delay_1ms(750);//停电750ms后恢复供电
- boot = 0;//拉低ESPxx的GPIO0或GPIO9引脚电平
- power_reset = 0; //继电器断开目标板单片机得电复位
- Delay_1ms(2000);
- boot = 1;
- EX0 = 1; //工作完成后恢复中断响应
- }
- }
- }
复制代码
|
打赏
-
查看全部打赏
|