參考引用:https://www.cnblogs.com/einstein-2014731/p/4885300.html
在做基於STM32的多功能MP3播放器的課題時,在程序下載這部分時借鑒了正點原子開發板上的一鍵下載電路,采用CH340G這款芯片設計。
在畫PCB初期原理圖部分,對采用CH340G設計的一鍵下載電路不甚了解,於是花了一些時間來研究一下這個電路。
引用正點原子的一鍵下載電路:
CH340芯片版本:

PL2303芯片版本:

boot跳線帽:

在CH340的數據手冊上有引腳的介紹以及作用:
這兩個引腳:DTR#和RTS#都是 輸出類型,

這兩個引腳:DTR#和RTS#都是 輸出類型,
MCUISP(一鍵下載工具),會控制CH340這兩個引腳的高低電平狀態,通過控制DTR#和RST#這兩個引腳的高低電平狀態,從而控制STM32的BOOT0 和 RESET.
我們通過RTS#和DTR#兩個輸出信號來控制STM32 IC的BOOT0和BOOT1兩引腳來選擇啟動模式,如下表:

當燒寫程序時,我們希望BOOT0=1,BOOT1=0。當燒寫完成后我們希望BOOT0=0,BOOT1=0(這個模式BOOT1可以是0可以是1,這里我們讓BOOT1拉低,即整個過程BOOT1都為L接地,簡化電路設計)。
這里我們只需考慮BOOT0的高低。
查看STM32的參考手冊,如下圖:

注意表6下方第一句話:“在系統復位后,SYSCLK的第4個上升沿,BOOT引腳的值將被鎖存。”
OK,綜上所訴,我們可以得到:1、系統上電,BOOT0需為L,進入模式一。上電復位后,在SYSCLK的第4個上升沿,BOOT引腳的值將被鎖存,進入主閃存存儲器,執行我們燒寫的代碼。
2、當我們編譯好程序,生成HEX文件。在燒寫HEX文件時,BOOT0需為H,進入模式二。然后,系統必須復位一次(因為由1知道,系統上電后默認執行代碼,即模式一),讓系統重新鎖存BOOT引腳。系統進入模式二,開始燒寫HEX文件。
3、燒寫完成后,我們希望系統再次進入模式一,執行代碼。但正點原子的一鍵下載電路並沒有讓系統完成燒寫程序后再次復位重新鎖存BOOT引腳進入模式一。這個原因應該是MCUISP軟件幫我們配置好了,在燒寫完成后會有報告:“成功從08000000開始運行”。
在參考手冊中有這樣一段話:

從另一個方向來理解它,可以這么說:主閃存存儲器從地址(0x0800 0000)訪問,不管是系統自動的還是軟件配置的,只要系統指針跳到主閃存存儲器的地址(0x0800 0000)處開始執行代碼,就可以了,結果是我們想要的。
以上就是一鍵下載電路需要實現的功能,原子兄幫我們設計出來了。如果看不懂的話,可以參考我下面的解釋。
我們需要注意一點:CH340G上電后DTR#和RTS#都為高電平,在用MCUISP燒寫軟件時,我們在軟件下方選擇“DTR的低電平復位,RTS高電平進BootLoader”,CH340G IC在實際操作時引腳的變化為“DTR#拉高,RTS#拉低”,即軟件設置和實際情況是取非的,相反的。
畫個時序圖,直觀一些:

原文:http://www.360doc.com/content/14/0921/11/14951572_411210231.shtml