
一、SWJ调试端口 STM32有两种程序调试接口(程序烧写口),具体如下:, H0 W2 y$ ]3 I0 f" F SWD调试接口: PA13、PA14共两个引脚。! I- \. i3 j' z0 Y$ i9 q5 m JTAG调试接口: PA13、PA14、PA15、PB3、PB4共五个引脚。! X6 t. a4 _- @ o/ Y 0 H) R) W4 L; G& X- \ 单片机启动后,初始状态这五个引脚就默认是调试接口。 而实际使用中,一般只使用 SWCLK、SWDIO这两个引脚用做SW调试接口。 其余的三个引脚可以空出来,重新定义为普通I/O来使用。 如果需要将它们用作普通IO口,需要进行引脚复用,禁止调试功能。 4 g+ l3 {" B6 J1 E# k 二、SWJ调试端口设置成普通I/O口步骤7 \9 y% M. N; S' a: m 1. 配置复用时钟, x3 f/ q: w* }6 c3 i RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE ); //配置复用时钟 1) k+ e6 ?& ?5 b0 S 2. 禁用调试功能 GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE); //全功能SW+JTAG,禁用JTRST,PB4可用1 Z& o; N ?( { D8 f& U3 C GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //启用SW,禁用JTAG,PA15、PB3、PB4可用 GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE); //完全禁用SW+JTAG,PA13、PA14、PA15、PB3、PB4可用# t( q( b0 M" j( A" i3 t9 z 1' I$ |4 q" T4 z- q 2 3* c* B5 H- A& K SWJ调试端口,只能使用以上3种重映射方法,不可对单独引脚设置。; i& K: a( ?$ W- _- J! m: | 三、SWJ调试端口设置成普通I/O口程序* J8 k e# R1 j8 | /* 禁用 JTAG,PB3、PB4、PA15重定义为普通IO */$ n4 {, Q. r' m: D, s# u% P3 F GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE);//使能PA和PB端口时钟 + g; i: \2 s9 p8 {7 R% K RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE ); //配置复用时钟 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//启用SW,禁用JTAG,PA15、PB3、PB4可用: I1 Z4 Z% _7 s5 G' k+ K+ J; G# p # _4 Z! t" u# O" ~$ {; g! X+ b$ i% l8 p GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_3; //端口配置 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出( X, [% E8 H9 i+ A0 G+ n GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化; B1 [! E- P9 e9 m4 e% M2 h4 A 2 ]; I4 i' }3 s9 l/ N, ^# v& A GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; //端口配置4 a% {" k6 I3 p$ }4 T% h GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz GPIO_Init(GPIOA, &GPIO_InitStructure); //根据设定参数初始化. x3 B, y& F) {. V( E 7 c. i. `$ j' ~ p+ T) y# S F: l: Z: G% R* y1 w T |