情况一:PA15和PB3和PB4三个引脚当作GPIO来使用

// 启用 AFIO(Alternate Function I/O)时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

// 禁用 JTAG(Joint Test Action Group)调试功能以释放引脚
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);

情况二:重映射定时器或者其它外设的复用引脚

// 启用 AFIO(Alternate Function I/O)时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

// 部分重映射 TIM2,这会将 TIM2 的部分引脚重映射到其他引脚
GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2, ENABLE);

情况三:如果重映射正好是JTAG调试端口

// 启用 AFIO(Alternate Function I/O)时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

// 部分重映射 TIM2,这会将 TIM2 的部分引脚重映射到其他引脚
GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2, ENABLE);

// 禁用 JTAG(Joint Test Action Group)调试功能以释放引脚
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);

当你启用 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); 时,你实际上是启用了 AFIO(Alternate Function I/O)时钟。AFIO 模块是用于配置 GPIO 引脚的交替功能的模块。启用这个时钟允许你配置 GPIO 引脚的交替功能,比如重映射。

GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2, ENABLE); 用于启用部分重映射功能,将 TIM2 的部分功能映射到 GPIO 引脚上。在这里,我们启用了第一种部分重映射功能,将 TIM2 的部分功能映射到了 GPIO 引脚上。

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); 用于禁用 JTAG 接口,并释放 JTAG 相关引脚,使它们可以用作普通的 GPIO 引脚。这个操作可能会与其它功能映射冲突,所以在需要使用 GPIO 引脚时,可能需要禁用 JTAG 接口。

往事堪堪亦澜澜,前路漫漫亦灿灿。