找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 12542|回复: 21
打印 上一主题 下一主题
收起左侧

STC免冷启动下载器制作 附单片机程序+原理图PCB文件

  [复制链接]
跳转到指定楼层
楼主
终于把这个东西做出来,前前后后卡好久运力,这是一款用于给STC各个系列单片机烧录程序的下载器,支持STC12,STC15,STC8系列,STC的支持。
下载原理
USB转TTL芯片是CH340N,控制芯片STC15F104W,
当STC烧录软件发起烧录程序指令时,会想单片机发送一连串的 F8指令,(用其他串口工具可以观测到,波特率9600)。并且CH340N的联络脚RTS会产生低电平脉冲。
利用这两点,用STC15F104W监测CH340N的状态,有下载信号时,先给目标单片机断电再上电,即可完成下载。
具体原理:可参考这个链接https://blog.csdn.net/recclay/article/details/81347339

这里要注意一点,STC15F104W这个型号的单片机没有串口,只能用软件模拟一个串口,具体可以参考STC15的官方例程库,在官网有,当然我上的的附件也有
我这一款下载器有一点要说明,那个按键开关是常闭状态的,即没有按下时,是导通的,按下以后开关,断开。设计这个开关,一方面是起冷启动的作用,另一方面,在调试产品的时候,可以按这个键对产品断电再上电,免得去插拔USB接口。

下载的成功率也是很高的,保守96%以上吧,当不能下载时可以通过手动开关进行断电再上电。如此还不行的话,请检查电路是否正确。
制作出来的实物图如下:

Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)



以下是主程序,完整的程序见附件

  1. #include "Drive.h"

  2. u8 Int1Num=0;        //中断次数
  3. u8 UART_TX_BUFF[30]={1,2,3,4,5,6,7};

  4. sbit ISP = P3^4;        //控制电源端口
  5. sbit RTS = P3^3;        //检测CH340C下载信号

  6. void Delay(u16 t)
  7. {
  8.         u16 j,k;
  9.         for(k=0;k<t;k++)
  10.                 for(j=0;j<500;j++);
  11. }

  12. //--外部中断1初始化
  13. void Init_Int1()
  14. {
  15.         PT1 = 1;        //将外部中断1设为最高优先级
  16.         INT1 = 1;        //中断引脚P3^3;
  17.         IT1 = 1;        //中断类型1:下降沿,0:上升沿和下降沿
  18.         EX1= 1;
  19.         EA= 1;
  20. }

  21. void main()
  22. {
  23.         u8 a;
  24. //--用定时器0模拟一个串口
  25.         Time0_Init();
  26.         Init_Uart();
  27. //-----------------------
  28.         Init_Int1();
  29.         ISP = 0;
  30.         while(1)
  31.         {
  32.                 if(Int1Num==1)
  33.                 {
  34.                         while(a<20)
  35.                         {
  36.                                 if(RxOK == 1)
  37.                                 {
  38.                                         if(UART_RX_BUFF[0] == 0XF8)
  39.                                         {
  40.                                                 a++;
  41.                                         }
  42.                                         //else        break;
  43.                                         Clear_UART_BuffFlag();
  44.                                 }
  45.                                 
  46.                         }
  47.                         if(a>=20)        //断开电源,再接通电源,开启下载
  48.                         {
  49.                                 ISP =1;        //断开
  50.                                 TR0 = 0;
  51.                                 Delay(800);
  52.                                 Delay(800);
  53.                                 ISP =0;        //接通
  54.                                 Clear_UART_BuffFlag();
  55.                                 Delay(800);
  56.                                 a=0;
  57.                         }
  58.                         Int1Num = 0;
  59.                 }
  60.                 else
  61.                 {
  62.                         TR0 = 1;
  63.                         ISP = 0;        //接通电源
  64.                 }
  65.         }
  66. }

  67. void EXint2() interrupt 2
  68. {
  69.         Int1Num=1;
  70. }
复制代码

全部资料51hei下载地址:
STC免冷启动下载器-程序-原理图.zip (4.27 MB, 下载次数: 216)

评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏26 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:224782 发表于 2020-6-29 11:46 | 只看该作者
下载时是向单片机发0xF8???????
回复

使用道具 举报

板凳
ID:210139 发表于 2020-7-21 13:55 | 只看该作者
大风吹过啊 发表于 2020-6-29 11:46
下载时是向单片机发0xF8???????

自己用串口软件观察
回复

使用道具 举报

地板
ID:66757 发表于 2021-2-13 09:53 来自手机 | 只看该作者
对!就是一大串!
回复

使用道具 举报

5#
ID:434663 发表于 2021-6-2 22:29 | 只看该作者
下载的时候 发送的是 0x7F
回复

使用道具 举报

6#
ID:434663 发表于 2021-6-2 22:30 | 只看该作者
CH340N???
回复

使用道具 举报

7#
ID:884042 发表于 2021-6-12 17:58 | 只看该作者
杀死比亚 发表于 2020-7-21 13:55
自己用串口软件观察

不是0xf7吗?
回复

使用道具 举报

8#
ID:59830 发表于 2021-6-13 14:06 | 只看该作者
下载看一下。其实不用单片机。
直接用RST 控制  场效应管 或 开关切换IC 也可以吧.
串口这样接会不会影响串口功能.
回复

使用道具 举报

9#
ID:210139 发表于 2021-6-18 15:47 | 只看该作者
yygdzjs 发表于 2021-6-13 14:06
下载看一下。其实不用单片机。
直接用RST 控制  场效应管 或 开关切换IC 也可以吧.
串口这样接会不会影响 ...

不会影响串口功能,不烧录程序的时候,就可当串口使用
回复

使用道具 举报

10#
ID:210139 发表于 2021-6-18 15:48 | 只看该作者
rsurb0371 发表于 2021-6-2 22:29
下载的时候 发送的是 0x7F

用串口观察的时候,波特率不一样,结构就不一样,我是用115200观察的
回复

使用道具 举报

11#
ID:210139 发表于 2021-6-18 15:49 | 只看该作者

对没错,就是CH340N,不用外部晶振的
回复

使用道具 举报

12#
ID:210139 发表于 2021-6-18 15:50 | 只看该作者
杀死比亚 发表于 2021-6-18 15:47
不会影响串口功能,不烧录程序的时候,就可当串口使用

直接用硬件来控制,我没有试过
回复

使用道具 举报

13#
ID:245629 发表于 2022-11-21 17:11 | 只看该作者
波特率9600时,确实是F8。

无标题.png (380.28 KB, 下载次数: 118)

无标题.png
回复

使用道具 举报

14#
ID:245629 发表于 2022-11-21 17:17 | 只看该作者
波特率2400,是 0x7F

10.png (371.8 KB, 下载次数: 110)

10.png
回复

使用道具 举报

15#
ID:16255 发表于 2022-11-22 14:08 | 只看该作者
chenbl 发表于 2022-11-21 17:17
波特率2400,是 0x7F

实际是0x7F。
请看,软件上的设定最低波特率为2400,所以这个7F也是用2400来发送的。
回复

使用道具 举报

16#
ID:245629 发表于 2022-11-23 08:56 | 只看该作者
mengsiu 发表于 2022-11-22 14:08
实际是0x7F。
请看,软件上的设定最低波特率为2400,所以这个7F也是用2400来发送的。

嗯,是的,下载软件是用最低波特率来发送,只要设置最低波特率跟接收同样,接收的是0x7F,但是STC下载软件每次打开默认最低波特率2400,最高115200,所以这个烧录器使用时,打开下载软件不用去调最低波特率工作是正常的。
回复

使用道具 举报

17#
ID:408539 发表于 2023-1-11 22:37 | 只看该作者
这个我也研究过,不用那么复杂    CH340收到USB发来的串口信号时RST脚输出一个低电平脉冲,,利用这个脉充用RC延时一下断开MUC电源即可
回复

使用道具 举报

18#
ID:292518 发表于 2023-4-7 10:15 | 只看该作者
明记冷气 发表于 2023-1-11 22:37
这个我也研究过,不用那么复杂    CH340收到USB发来的串口信号时RST脚输出一个低电平脉冲,,利用这个脉充用RC ...

学习了
回复

使用道具 举报

19#
ID:1089126 发表于 2023-9-22 14:12 | 只看该作者
额,如果说我不用软件进行冷启动加个按键进行冷启动会怎么样?
回复

使用道具 举报

20#
ID:491875 发表于 2023-9-23 15:58 | 只看该作者
明记冷气 发表于 2023-1-11 22:37
这个我也研究过,不用那么复杂    CH340收到USB发来的串口信号时RST脚输出一个低电平脉冲,,利用这个脉充用RC ...

实验这个电路可行,延时电容104有些小了,我把他改成474效果很好。
回复

使用道具 举报

21#
ID:491875 发表于 2023-9-25 22:53 | 只看该作者
147532 发表于 2023-9-22 14:12
额,如果说我不用软件进行冷启动加个按键进行冷启动会怎么样?

按键肯定可以,不过需要手动控制
回复

使用道具 举报

22#
ID:292518 发表于 2023-9-26 10:15 | 只看该作者
明记冷气 发表于 2023-1-11 22:37
这个我也研究过,不用那么复杂    CH340收到USB发来的串口信号时RST脚输出一个低电平脉冲,,利用这个脉充用RC ...

大神的电路,验证过了,可以使用,全自动下载...
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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