【写在前面】
最近项目上有用STM32F103ZET6开发板在做产品开发,前期测试时PB3/4,PA13/14/15因为作为JTAG/SWD仿真器的调试接口,所以不能像其他正常I/O口一样下置零。
【原因】
通过芯片开发电路的原理图设计我们能够看到PB3/4,PA13/14/15 等 5个普通I/O口都用作SWJ-DP接口引脚。这些引脚在所有的封装里都存在。
通过芯片手册中我们能够清楚的看到整个F10XXXXX系列的芯片,在电路设计和初始化设计时默认复位之后PB3/4,PA13/14/15五个引脚全部都初始化为可被调试器使用的专用引脚
【解决方案】
要想正常的使用这些端口的功能我们只需要直接释放PB3/4,PA13/14/15五个引脚的调试器初始化设置功能就好。
查看手册中PB3/4,PA13/14/15五个引脚的定义功能。
以PA15为例,通过端口重映射功能实现PA15功能的恢复
//一.在时钟配置中打开复用时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);
//二.对PA13引脚进行重映射:
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
由上图可知,重映射的方式一共有三种。分别描述如下:
- 1.GPIO_Remap_SWJ_JTAGDisable;
即能用PB3,PB4,PA15做普通IO,PA13&14用于SWD调试 - 2.GPIO_Remap_SWJ_Disable:
5个引脚全为普通引脚,但不能再用JTAG&SWD仿真器调试,只能用st-link调试 - 3.GPIO_Remap_SWJ_NoJTRST:
PB4可为普通IO口,JTAG&SWD正常使用,但JTAG没有复位
如果你用到所有的五个引脚当做普通IO口,那么上述步骤二中的重映射配置应写为GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);
如果你用PB3,PB4,PA15做普通IO,PA13&14用于SWD调试,则重映射配置应写为GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); 同理可配置只用PB4可为普通IO口的情况。