1. 程式人生 > >都是stm32的JTAG引腳惹的禍

都是stm32的JTAG引腳惹的禍

轉載請註明出處:http://blog.csdn.net/qq_26093511/article/category/6094215

最近在除錯08介面的LED顯示屏,使用的是自己做的STM32板子。

除錯的時候,突然發現顯示屏,怎麼都不亮,我就開始懷疑人生了。。。。。。。。

難道是程式問題?

吧啦吧啦的查詢時序圖,修改修改,加延時。。。。然而並沒有什麼卵用!唉,都讓我懷疑是不是引腳接錯了,反覆測量後發現引腳確實是對的

難道是硬體問題?

我把不需要的程式全部註釋掉!  

只讓STM32相應的08介面的IO口 全部輸出高電平,測量結果正常。

只讓STM32相應的08介面的IO口 全部輸出低電平,結果發現PA15這個引腳輸出的是高電平。輸出有問題啊!

最後查詢STM32f10x系列的手冊,結果發現STM32F10x系列的MCU復位後,PA13/14/15 & PB3/4預設配置為JTAG功能。

oh ,no ! 折磨我兩天的問題,竟然是JTAG惹的禍!

為了充分利用MCU I/O口的資源,把這些埠設定為普通I/O口。

具體方法如下:

//開啟AFIO 時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

// 改變指定管腳的對映 GPIO_Remap_SWJ_Disable SWJ 完全禁用(JTAG+SW-DP)
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);

// 改變指定管腳的對映 GPIO_Remap_SWJ_JTAGDisable ,JTAG-DP 禁用 + SW-DP 使能
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);


注意:AFIO 時鐘未設定,GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE) 這句不會生效,也就是要先設定時鐘,才能配置相應埠

最後,感謝鄭老師的指導!