免冷启动自动下载

举报
ReCclay 发表于 2022/02/22 01:26:44 2022/02/22
【摘要】 今天吧,看着武哥的文章,看到DTR,RTS,又联想到了正在学的32上的ISP以及之前NodeMCU上的DTR和RTS,感觉挺有意思的一个东西,遂产生一个想做一个免冷启动的装置。 做好这个东西当知非一朝一...

今天吧,看着武哥的文章,看到DTRRTS,又联想到了正在学的32上的ISP以及之前NodeMCU上的DTRRTS,感觉挺有意思的一个东西,遂产生一个想做一个免冷启动的装置。
做好这个东西当知非一朝一夕之事,别急,静下心来!
比起成品,我想我更想要艺术品。


那就拿51单片机开刀吧,STC单片机免冷启动自动下载。网上也查了蛮多的,具体实现方法实践可用的无外乎三种,
1、使用CH340的DTR和RTS控制单片机断电再上电。(点上位机下载按钮的时候,DTR和RTS引脚电平变化的。

2、再使用一个单片机,检测串口下载命令流

3、在程序中控制IAP_CONTR同时在上位机进行相应的设置!,具体也可参考我的这篇博文

第三种属于软件实现,这里就不再赘述了,主要看前两种的硬件实现。


1、利用CH340DTRRTS引脚

先用示波器看一下,点击STCISP的下载按钮时CH340G的RTSDTR引脚的变化。

这里写图片描述

大概是这样

这里写图片描述

直观思路呢,就是利用RTS或者DTR的一个。利用他们的下降沿触发一个信号,控制单片机断电,然后一定时间后再通电,这个不就是硬件的冷启动了嘛!不需要再按开关了。

那么这样的一个信号是什么信号呢?
单稳态!

这里写图片描述

具体实现电路,
这里写图片描述

这部分电路,也是参照武哥的,具体参数及电路解释可参考武哥的这篇博文,这里就不再复述了。更多详细,点这里

2、利用单片机

冷启动的原因直白来说,也只有单片机在重新上电的时候会去检测是否有合法数据流,有进入ISP下载模式,没有执行程序。

STC单片机有内部代码复位到下载程序,但是需要每一个软件中都要添加该程序段,并且会占用单片机内部资源,在写程序时也会产生不必要的麻烦,故而采用硬件自动重新上电(自动冷启动)​的方式。 – 也就是我上面介绍的第三种方法。

电路图,
这里写图片描述

一张更直观的图

这里写图片描述

程序也贴上来吧,

#include <STC15F2K60S2.H>       //STC15F104头文件
#define uint unsigned int       //宏定义
#define uchar unsigned char

/****单片机I/O功能声明*******************/
sbit DYKZD=P3^4;                //电源控制端
sbit  XZXHD=P3^3;               //下载信号检测端
sbit INT1  = P3^3;              //设置中断管脚
uchar x;                        //下载信号低电平个数
/****初始化******************************/
void init()//初始化子函数
{
DYKZD=0;                        //电源控制端打开
XZXHD=1;
INT1= 1;
IT1= 1;                         //设置INT1的中断类型 (1:仅下降沿 0:上升沿和下降沿)
EX1= 1;                         //使能INT1中断
EA = 1;                         //打开总中断开关
}
/****延时函数****************************/
void delayms(uint xms)
{
    uint i,j;
    for(i=xms;i>0;i--)
    for(j=110;j>0;j--);
}
/****外部中断ITN1************************/
void exint1() interrupt 2      
{
    x++;
}
/****主程序******************************/
void main() 
{
    init();
    while(1)
    {
        if(x>10)
        {
            DYKZD=1;
            delayms(100);
            DYKZD=0;
            delayms(60000);
            x=0;
        }
    }
}
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

三种方法介绍完了,好坏至少得对比下。

1、纯硬件的实现,一个需要555,另一个需要一个8个的单片机,并且还得烧程序。相比之下555还便宜点,这种方案更好点。

2、软件的就不说了,占内存,所以首选555的那种方案!

文章来源: recclay.blog.csdn.net,作者:ReCclay,版权归原作者所有,如需转载,请联系作者。

原文链接:recclay.blog.csdn.net/article/details/81347339

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。