终于把这个东西做出来,前前后后卡好久运力,这是一款用于给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附件中可下载工程文件)
以下是主程序,完整的程序见附件
- #include "Drive.h"
- u8 Int1Num=0; //中断次数
- u8 UART_TX_BUFF[30]={1,2,3,4,5,6,7};
- sbit ISP = P3^4; //控制电源端口
- sbit RTS = P3^3; //检测CH340C下载信号
- void Delay(u16 t)
- {
- u16 j,k;
- for(k=0;k<t;k++)
- for(j=0;j<500;j++);
- }
- //--外部中断1初始化
- void Init_Int1()
- {
- PT1 = 1; //将外部中断1设为最高优先级
- INT1 = 1; //中断引脚P3^3;
- IT1 = 1; //中断类型1:下降沿,0:上升沿和下降沿
- EX1= 1;
- EA= 1;
- }
- void main()
- {
- u8 a;
- //--用定时器0模拟一个串口
- Time0_Init();
- Init_Uart();
- //-----------------------
- Init_Int1();
- ISP = 0;
- while(1)
- {
- if(Int1Num==1)
- {
- while(a<20)
- {
- if(RxOK == 1)
- {
- if(UART_RX_BUFF[0] == 0XF8)
- {
- a++;
- }
- //else break;
- Clear_UART_BuffFlag();
- }
-
- }
- if(a>=20) //断开电源,再接通电源,开启下载
- {
- ISP =1; //断开
- TR0 = 0;
- Delay(800);
- Delay(800);
- ISP =0; //接通
- Clear_UART_BuffFlag();
- Delay(800);
- a=0;
- }
- Int1Num = 0;
- }
- else
- {
- TR0 = 1;
- ISP = 0; //接通电源
- }
- }
- }
- void EXint2() interrupt 2
- {
- Int1Num=1;
- }
复制代码
全部资料51hei下载地址:
STC免冷启动下载器-程序-原理图.zip
(4.27 MB, 下载次数: 216)
|