STM32 特殊的PB4


之前寫代碼給PB4配置輸出模式,上機運行,發現PB4不受控制,一直是高電平。

經過學習后得知PB4在系統復位時候,默認SYS_HJTRST,還有PA13、PA14、PA15、PB3同理。

因此,想要使用以上IO口,需要禁止其功能。

標准庫“stm32f10x_gpio.h”中存在重映射定義如下:

#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) */

首先,需要打開重映射時鍾和重映射后的I/O口引腳時鍾,因為需要先打開復用功能才能修改。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);

然后重映射,關閉JTAG功能。

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);

注意,此時因JTAG已經關閉,因此不能使用JTAG燒錄程序,只能使用SWD或串口燒錄。

之后正常進行端口初始化配置,使能端口。

由於PB4默認處於上拉階段,如果開機時需要PB4為低電平,還需要進行置位。

GPIO_ResetBits(GPIOB,GPIO_Pin_4);

以上代碼將PB4初始拉低。

希望能幫助大家!

 

一個示例

 
         

GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);

 
         

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);

 
         

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);

 
         

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);

 
         

GPIO_ResetBits(GPIOB,GPIO_Pin_4);

 

 


免責聲明!

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



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