處女座,為了板子走線美觀,拉線方便,在項目量產前,還更改了原來外設的IO口,埋頭苦干一天,移植ok,發現PB3一直不聽使喚,好,加班檢查代碼,檢查初始化,時鍾,IO對應,然后試PCB板,是否短路,斷路等等等,試遍了,紋絲不動,拉不高也拉不低。。。這是為什么呢,百度一下,才發現,PB3是JTAG口之一,需要把IO重映射為普通IO口使用,於是看着大大神們的帖子,回答,代碼中,加入了以下兩句話:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //開啟AFIO時鍾
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);// 改變指定管腳的映射 GPIO_Remap_SWJ_Disable SWJ 完全禁用(JTAG+SW-DP)
沒多看,就加入了初始化的行列,下載了進去,好使,好使,PB3聽話了,可是呢,當我再次調試完代碼准備下載進去板子的時候,發現,不能下載了!
回頭仔細一看,是完全禁用JTAG+SWD啊,我可是SWD口進行調試下載的啊!!!這可怎么辦。。。
於是又去互聯網搜索一番,亂七八糟一大堆,我比較懶,不喜歡折騰那么復雜,找到一個簡單粗暴的好辦法,分享給大家:
短路復位電容,點下載,稍等幾秒(這個靠感覺嘍),斷開短路的電容,OK!大功告成!
這是因為復位的時候,禁止JTAG的寄存器也是復位狀態,所以JTAG就自動啟動,未被禁止。
最紅附上我最后使用的實際代碼:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //開啟AFIO時鍾
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);// 改變指定管腳的映射 GPIO_Remap_SWJ_JTAGDisable ,JTAG-DP 禁用 + SW-DP 使能
以上內容均來源於互聯網,還給互聯網,只為大家某天碰到這個坑,可以早日出坑~