[url=]Questions[/url]:如何将以下默认非GPIO的Pin设置为GPIO OSC_IN PD0 OSC_OUT PD1 JTMS-SWDIO PA13 JTCK-SWCLK PA14 JTDI PA15 JTDO PB3 NJTRST PB4 TAMPER-RTC PC13 OSC32_IN PC14 OSC32_OUT PC15 Answer:将以上IO设置为GPIO,需要开启对应GPIO时钟、开启复用时钟、将IO配置为输入/输出/复用功能、设置重映射、关闭入侵检测、关闭外部时钟等相应的操作。 1. 将OSC_IN、OSC_OUT设置为GPIO输出,需要设置如下: //开启GPIOD时钟、开启复用时钟 RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_GPIOD | RCC_APB2PERIPH_AFIO, ENABLE); //关闭外部高速时钟 RCC_HSEConfig(RCC_HSE_DISABLE); //设置PD0、PD1为推挽输出 GPIO_InitStructure.GPIO_Pins = GPIO_Pins_0 | GPIO_Pins_1; GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT_PP; GPIO_Init(GPIOD, &GPIO_InitStructure); //设置重映射 JTAG-DP Disabled and SW-DP Enabled GPIO_PinsRemapConfig(GPIO_Remap_PTD01, ENABLE); 注:如果要使用PD0、PD1,则时钟初始化时不用使能HSE、PLL时钟源不能选择为HSE。 2. 将SWJ设置为GPIO,例如将JTDI、JTDO、NJTRST设置为GPIO输出,需要设置如下: //开启GPIOA、GPIOB时钟、开启复用时钟 RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_GPIOA | RCC_APB2PERIPH_GPIOB | RCC_APB2PERIPH_AFIO, ENABLE); //设置PA15、PB3、PB4为推挽输出 GPIO_InitStructure.GPIO_Pins = GPIO_Pins_15; GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pins = GPIO_Pins_3 | GPIO_Pins_4; GPIO_Init(GPIOB, &GPIO_InitStructure); //设置重映射 JTAG-DP Disabled and SW-DP Enabled GPIO_PinsRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
关于SWJ重映射说明: /*!< Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST */ #define GPIO_Remap_SWJ_NoJNTRST ((uint32_t)0x01000000) /*!< JTAG-DP Disabled and SW-DP Enabled */ #define GPIO_Remap_SWJ_JTAGDisable ((uint32_t)0x02000000) /*!< Full SWJ Disabled (JTAG-DP + SW-DP) */ #define GPIO_Remap_SWJ_AllDisable ((uint32_t)0x04000000) 3. 将TAMPER-RTC、OSC32_IN、OSC32_OUT设置为GPIO输出,需要设置如下: //开启GPIOC时钟、开启备份接口时钟、开启电源接口时钟 RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_GPIOC, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1PERIPH_BKP, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1PERIPH_PWR, ENABLE); //关闭入侵检测和外部低速时钟 PWR_BackupAccessCtrl(ENABLE); BKP_TamperPinCmd(DISABLE); //关闭入侵检测 RCC_LSEConfig(RCC_LSE_DISABLE); //关闭外部低速时钟 PWR_BackupAccessCtrl(DISABLE); //设置PC13、PC14、PC15为推挽输出 GPIO_InitStructure.GPIO_Pins = GPIO_Pins_13 | GPIO_Pins_14 | GPIO_Pins_15; GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT_PP; GPIO_Init(GPIOC, &GPIO_InitStructure); 注:如果要使用PC14、PC15,则时钟初始化时不用使能LSE。 类型:MCU 应用 适用型号:全系列(AT32F403, AT32F403A, AT32F413,AT32F415, AT32F407) 主功能:GPIO
|