對於一些違反常理的問題,一般手冊上都會有額外的說明為什么回事這樣,所以手冊很重要,就今天而言,我做一個小項目時用到了STM32的PB4這個管腳,然后采用了一般GPIO的通用配置,但是在調試時,卻發現這個腳不論怎樣都不能置為低,所以我趕緊去看了下手冊,然后發現PB4管腳還有復用功能,是一個JTAG的調試引腳,而且定睛一看,還發現這個管腳在上電復位時會默認為調試引腳的功能,而它的復用功能才是普通IO口,類似的還有PB3/PA13/PA14等管腳都是一樣,要用作普通IO口,需要配置為復用模式。
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);
// 改變指定管腳的映射 GPIO_Remap_SWJ_Disable SWJ 完全禁用(JTAG+SW-DP),設置了這個,就是將調試用的PB3/PB4/PA13PA14等口全部用作普通IO口。
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);
// 改變指定管腳的映射 GPIO_Remap_SWJ_JTAGDisable ,JTAG-DP 禁用 + SW-DP 使能 ,設置了這個就是只將PB3/PB4用作普通IO口。
同時打開復用時鍾 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
然后按照一般管腳配置就行啦。
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
注意兩點:
1、必須先打開復用時鍾,再使用函數禁用JTAG調試,否則可能會配置不成功。
2、如果按上面的配置后有時會KEIL會識別不了下載器,沒辦法下載程序,這時因為你進行了上面的設置導致的,這時我們只需要按住板子上的復位鍵,然后點擊下載后迅速放 開復位鍵,就能下載程序了。建議盡量不要使用這幾個腳作為按鍵輸入引腳。
