STM32的JTAG與SWD接口禁用問題


我們在用單片機開發產品是無可避免的會使用到JTAG或者SWD接口或者是硬件工程師的粗心大意,或者是因為硬件資源的限制,當我們遇到這些問題的時候就需要復用這些IO口

#define GPIO_Remap_SWJ_NoJTRST      ((uint32_t)0x00300100)  /*!< Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST */
#define GPIO_Remap_SWJ_JTAGDisable  ((uint32_t)0x00300200)  /*!< JTAG-DP Disabled and SW-DP Enabled */
#define GPIO_Remap_SWJ_Disable      ((uint32_t)0x00300400)  /*!< Full SWJ Disabled (JTAG-DP + SW-DP) */

這是STM32官方庫的宏定義

#define GPIO_Remap_SWJ_NoJTRST      ((uint32_t)0x00300100)  /*SWD使能、JTAG使能但是不包括JNRST引腳 */
#define GPIO_Remap_SWJ_JTAGDisable  ((uint32_t)0x00300200)  /*SWD使能、JTAG失能 */
#define GPIO_Remap_SWJ_Disable      ((uint32_t)0x00300400)  /*SWD與JTAG全部失能 */

(1)復用JTAG接口,保留SWD接口

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//

  GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//

(2)復用JTAG接口與SWD接口

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//

  GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);//

(3)只復用JNRST引腳

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//

  GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE);//

其中有幾個情況比較讓人頭疼

(1)在完全復用了JTAG與SWD接口情況下要是想修改程序怎么辦呢?

    答:目前有兩種方案:方案一:一般PCB肯定會引出復位引腳的可以先按keil的下載按鈕,然后迅速按下PCB的復位按鈕,一般可以下載成功

                     方案二:改變BOOT0接到3.3V用串口下載程序,要是串口沒有引出來或者BOOT0直接接地了建議方案一

(2)在復用JTAG接口PB4的時候貼主遇到了一些問題

   就是PB4作為輸出引腳的時候有些模式不能完全輸出高電平或者低電平,要切換電平狀態有時候還得切換一下輸出模式,可能是STM32的一些設計BUG

 

 


免責聲明!

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



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