STM32:一鍵下載


1 下載協議

  1.1 JTAG協議

    JTAG全稱 joint test action group,邊界掃描系統協議;是調試芯片的通用標准協議;

  1.2 SWD協議

    SWD全稱 serial wire debug,串行調試協議;也是調試芯片的通用標准協議;

2 SWJ-DP

  SWJ-DP全稱 serial wire/JTAG - debug port,串行和邊界掃描系統調試端口;為stm32系列的程序下載端口;

  SWJ-DP可復用成JTAG調試接口、SW調試接口,分時復用JTAG協議、SWD協議進行下載;

  2.1 stm32f1系列引腳分配 

    

  2.2 SWJ-DP功能框圖

    功能如圖332所示:通過AHB-AP訪問cm3的總線矩陣,除cm3核心外的所有范圍都可以訪問讀取;

    

3 下載器

  使用下載器下載:通過約定好的引腳端口、使用約定好的通訊方式、把代碼寫入芯片內部的特定位置;

  STM32可以使用ULINK2下載器、JLINK下載器、STLINK下載器,以及各種抄板前三種下載器;

  3.1 ULINK2下載器

    生產公司:英國ARM-Keil公司

    適用芯片:8051,Cortex-M,ARM7,ARM9,C166內核系列芯片

    適用MDK:KEIL MDK

    適用協議:JTAG協議,SWD協議

    特點:目前為止沒有用過

  3.2 JLINK下載器

    生產公司:德國SEGGER(大約叫賽格)公司

    適用芯片:8051,Cortex-Mxxx,Cortex-Axxx,ARM7/ARM9/ARM11,Cortex-R4/R5內核系列芯片

    適用MDK:幾乎全部MDK,實在太多了就不寫了;

    適用協議:JTAG協議,SWD協議,SPI協議

    特點:目前功能最全,性能最穩定的JTAG下載器;支持好幾種pins的標准JTAG接口;

   3.3 STLINK下載器

    生產公司:意法半導體公司

    適用芯片:STM8,STM32系列

    適用MDK:KEIL,STM32CubeIDE,IAR等,沒有JLINK兼容的多;

    適用協議:STM8使用SWIM(single wire interface module)協議,STM32使用JTAG協議、SWD協議

    特點:下載器分別引出了兩個接口,SWIM接口給STM8使用,SWJ-DP接口給STM32使用;

4  不使用下載器下載

  不使用下載器下載:通過約定好的引腳端口、使用約定好的通訊方式、把代碼寫入芯片內部的特定位置;

  4.1 IAP

    IAP全稱 in-applicatin programing,在線應用編程下載;沒有接觸的機會也就沒有了解的興趣了;

  4.2 ISP

    ISP全稱 in-system programming,在線系統編程下載;

    ISP下載時,不能直接通過MDK下載,需要借助flash_loader.exe / fly_mcu.exe下載;

    ISP下載時,下載軟件通常通過usart1外設,與出廠bootloader程序直接通訊,bootloader將收到的代碼搬運到flash內部的啟動位置;

    下載軟件不僅可以通過usart1下載,部分系列芯片還可以使用spi、can、iic等外設;其他外設估計大概率遇不到;

    bootloader程序怎么將代碼搬運到flash內部並沒有告訴我們,我也懶得找為什么了;

  4.3 ISP一鍵下載電路

    ch340電平轉換芯片作用是直接將USB差分電平信號轉換為TTL信號傳遞給單片機;

    大約是ch340廠家將RTS、DTR引腳控制封裝進flymcu.exe並提供了電路接法;

    flymcu.exe軟件關於RTS、DTR的配置選擇為:"DTR的低電平復位,RTS高電平進bootloader",離譜媽媽快來開門;

    以下倒推一下那倆三極管的作用,為了方便推導,pnp三極管在此簡寫為n型管、npn三極管在此簡寫為p型管;

    手上只有正點的板子所以用他的電路圖,電路boot[1:0]是通過跳線帽手動修改的,本節前提手動配置了[boot1]=0b;

    

    4.3.1 ISP下載

      (1) [x:boot0]= x1b,reset先拉低再拉高;此時單片機根據boot[1:0]=x1b 從地址0x1FFF F000啟動,ISP下載;

      (2) [x:boot0]= x0b,reset先拉低后拉高,此時單片機根據boot[1:0]=x0b 從地址0x0800 0000啟動,執行程序;

         注意,如果[boot0]=0b,意味着RTS通過R48拉到了vcc,那么p型管始終截止,還怎么控制reset值呢?保留疑問繼續;

    4.3.2 ISP一鍵下載

      (1) RTS=1,DTR=1

        n型管截止斷路boot0接地,boot0=0;p型管截止斷路reset接vcc,reset=1;

        ch340上電初始化值;此時n型管不控制boot0狀態,p型管不控制reset值;

      (2) RTS=0,DTR  \

        n型管導通10k和1k電阻串聯后分壓,boot0=1;p型管導通reset接RTS,reset=0;

        ISP地址啟動;此時reset低電平有效,芯片復位;當前狀態假設持續10ms,F1系列reset復位信號持續典型值為2.5ms;

      (3) RTS \ ,DTR=1

        n型管狀態不變,boot0=1;p型管截止斷路reset接vcc,reset=1;

        ISP地址啟動;此時reset釋放,執行程序;芯片讀取boot[1:0]=01b,啟動ISP下載,直到flymcu.exe下載完成;

      (4) RTS=1,DTR  \

        此時n型管截止斷路boot0接地,boot0=0;p型管截止斷路reset接vcc,reset=1;

        此時n型管不控制boot0狀態,p型管不控制reset值;

      (5) isp下載完成后,從flash地址重新啟動的reset信號不是ch340控制的

        可能是由於勾選了flymcu.exe的“編程后執行”提供的,可能是由內核電源模塊提供的;

    4.3.3 ISP一鍵下載bug

      當usb轉串口接電腦之后,再給單片機上電的瞬間DTR和RTS的電平變化導致競爭冒險,使得單片機可能反復重復復位;

      以上是野火說的,可以解釋以下bug;

      當使用STLINK下載同時,同時使用ch340的usb轉串口,直接拔掉電腦端stlink_usb,usb轉串口會一直重復發送信息;

      usb轉串口會一直重復發送信息,說明此時芯片在反復重啟,反復復位;

      可能是因為stlink拔掉的時候reset信號出現了毛刺,可能通過電路板走線影響上了ch340的復位;

      然后導致ch340的DTR和RTS的競爭冒險所以單片機一直在復位;

      STM32 SWD下載口無法下載的原因和解決辦法 - 創世界 - 博客園 (cnblogs.com)

5 小結

  感覺自己棒棒噠;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM