STM32F1的IO口不能輸出高低電平的情況

學習STM32F1的小夥伴,經常需要控制IO口輸出高低電平,但是有時候會出現這樣一種情況,就是無論你開好了時鐘,配置好了引腳屬性,該IO口依舊不能如你所願輸出高低電平。

排除開發板損壞的情況,出現這種情況是屬於正常的,因爲該IO口很有可能被複用了,所以用不了通用模式。

以STM32F1爲例,查看手冊可知:

PA13、PA14、PA15、PB3、PB4這五個IO口從一開始就被默認了複用功能,被用在了JYAG調試功能上了,所以纔沒法使用通用功能來輸出高低電平。

如果真的要用到其中的某一些管腳,那就要先把他們從複用功能中解放出來,解決辦法就是開啓重映射覆用時鐘,根據上圖的手冊提示,將控制調試端口的寄存器AFIO->MAPR配置成四種模式中的一種,就能對應解放紅色框框中的IO口。

假如我要解放PA15,用庫函數的方法如下:

    //重映射需要先使能AFIO時鐘

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO ,ENABLE);

 

//只關閉JTAG而保留SWD GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);

關閉JTAG,保留SWD,該模式下,PA15、PB3、PB4就釋放出來了。


用寄存器操作的辦法如下:

     RCC->APB2ENR |= 1<<0;	//打開重映射時鐘
	
	//關閉JTAG,啓動SW-DP,因爲PA15默認是複用JTAG功能,所以要關掉才能使用通用功能輸出高低電平
	AFIO->MAPR &= 0X00FFFFFF;
	AFIO->MAPR |= 1<<25;

根據MAPR寄存器手冊,將其[24,26]位配置成010,該模式下,PA15、PB3、PB4就釋放出來了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章