4- stm32 gpio重對映
stm32 的PA15, PB3, PB4管腳做普通管腳的解決辦法:
使用的是SWD方式進行下載程式,僅僅使用到SWDIO(PA13) 和SWCLK(PA14)兩個管腳。我將PA15(JTDI)和PB3(JTDO)管腳用於他用(用於點LED使用),發現無法將這兩個管腳拉低:
我在網上搜到PA15,PB3,PB4這幾個管腳預設功能不是普通管腳,需要進行重對映後,才能普通使用
解決辦法:
GPIO_InitTypeDef GPIO_InitStructus;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);//RCC_APB2Periph_AFIO必須開啟
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//改變對映(失能JTAG)
GPIO_InitStructus.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStructus.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructus.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructus);
GPIO_InitStructus.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructus.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructus.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructus);
GPIO_SetBits(GPIOB,LED2);
其中:GPIO_Remap_SWJ_JTAGDisable 改變管腳對映(失能JTAG功能)
GPIO_Remap_SWJ_NoJTRST : Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST
GPIO_Remap_SWJ_Disable : Full SWJ Disabled (JTAG-DP + SW-DP)
什麼時候需要開復用時鐘,RCC_APB2Periph_AFIO:
(1)使用EXTI
(2)重對映(用到外設的重對映功能時才需要使能AFIO的時鐘)
舉例:重對映USART2
USART2的TX/RX在PA.2/3.但是,PA.2已經被Timer2的channel3使用.這時,如果還想使用USART2,但又不想影響Timer2的使用,這就需要把USART2的TX/RX重對映到PD.5/6。
對映庫函式的呼叫過程
(1)使能被重新對映到的I/O埠時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
(2)使能被重新對映的外設時鐘
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
(3)使能AFIO功能的時鐘(勿忘!)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
(4)進行重對映
GPIO_PinRemapConfig(GPIO_Remap_USART2,ENABLE);