STM32引腳JTDO、JNTRST與JTDI作爲普通IO口使用配置

使用Jlink向STM32燒錄程序時,需要使用6個芯片的引腳(以STM32F103C8T6爲例),分別是PB4/JNTRST、PB3/JTDO、PA13/JTMS、PA14/JTCK、PA15/JTDI、NRST。標準的20針JLink接口如下圖所示。
這裏寫圖片描述
當芯片IO口資源比較緊張時,可選擇SW模式燒錄程序。SWD只需用到PA13/JTMS、PA14/JTCK兩根線,NREST可以接可不接,而剩下的PB4/JNTRST、PB3/JTDO和PA15/JTDI就可以當做普通IO使用。但是這三個口當做普通IO使用時需要先配置。配置方法:

void GPIOInit(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);    
    /* Disable JLink, enable SW */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); 
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | 
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   
    /* Push-pill output, it can be other output types */
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   
    /* Push-pill output, it can be other output types */
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
    GPIO_Init(GPIOA, &GPIO_InitStructure);
}

GPIO_Remap_SWJ_JTAGDisable已在“stm32f10x_gpio.h”文件中進行了宏定義:

#define GPIO_Remap_SWJ_JTAGDisable  ((uint32_t)0x00300200)  
/*!< JTAG-DP Disabled and SW-DP Enabled */

注意!!!這三個引腳默認的是JLink的複用功能,如果程序中還有其他GPIO口的配置,那這三個引腳的GPIO初始化一定要放在其他所有GPIO配置之後,否則依然無法作爲普通IO使用。

如果非要把這三個引腳的配置放在其他GPIO配置之前,那麼在程序中每次使用這些引腳前,需要再添加一句 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); 例如:

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);  
GPIO_ResetBits(GPIOB, GPIO_Pin_4);  // PB4 is set to 0;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章