終于把這個東西做出來,前前后后卡好久運力,這是一款用于給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)
2020-5-27 15:07 上傳
點擊文件名下載附件
全套資料
|