首先STM32的引脚图:
1.表格颜色:
橙色是电源相关引脚。
蓝色是最小系统相关的引脚
绿色是IO口,功能这些引脚。
2.类型:
S代表电源,I代表输入,O代表输出,IO代表输入输出
3.I/O口电平(表示它能容忍的的电压):
FT是代表能容忍5v电压。
没有FT就代表只能容忍3.3V电压。
4.主功能(上电后默认的功能):
一般和引脚名称相同,如果不同的话,引脚的实际功能是主功能,而不是引脚名称的功能。
5.默认复用功能(IO口上同时连接外设功能引脚):
这个配置IO口的时候可以选择是通用IO口还是复用功能。
6.重映射功能:
作用:如果两个功能同时复用在一个IO口上,而确实需要用这个两个功能,就可以把其中一个复用功能重映射到其他端口上,前提是这个重定义功能的表里有对应的端口。
简单来说就是这个功能有两个GPIO口都能使用,但你的上电默认的端口(能完成这个功能的端口)有其他的用途,就可以将能完成这个功能的引脚重新定义到另一个能实现这个功能的引脚上,可以使新引脚代替它完成功能。
注:优先使用加粗的IO口,没有加粗的IO口可能需要配置或者兼具其他功能。
调试端口与介绍:
表中34,37~40端口是调试端口,是用来调试程序和下载程序的,STM32支持SWD和JTAG在两种调试方式。
- SWD需要两根线,分别是SWDIO和SWCLK
- JTAG需要五根线,分别是JTMS,JTCK,JTDI,JTDO,NJTRST
我使用的是DAP-Link用的是SWD模式,只用了A13和PA14两个IO口,剩下的PA15,PB3,PB4可以切换为普通的IO口来使用。但需要在程序中配置,接下来介绍配置方法:
- 首先:这是引脚重映射配置函数(要用到AFIO)
void GPIO_PinRemapConfig (uint32_t GPIO_Remap, FunctionalState NewState);
第一个参数是重映射方式,可以查看手册(STM32F10×××),在
AFIO这一章中的复用功能IO和调试配置小节,例如:
在此图中,TIM2有四种重映射方式:
- 没有重映射:TIM2的四个CH通道引脚就是PA0~PA3
- 部分重映射方式1:CH1和CH2引脚变成PA15和PB3后两个不变。
- 部分重映射方式2:CH3和CH4引脚变成PB10和PB11前两个不变
- 完全重映射:四个引脚都变化,为PA15,PB3, PB10,PB11。
其他表都类似情况,有需要可查表。
但是还有个注意是:如果想把TIM2中PA1改成PA15,但是在引脚定义表中,PA15是没有加粗的,也就是说它的主功能并不是简单的IO口,上电后默认复用为了调试端口JTDI,所以想让他作为普通的GPIO或者复用定时器的复用通道,那还需要先关闭调试端口的复用。
关闭方法:和使用重映射的函数一致。
它的参数中三个参数是要记住的:
这三个参数就是用来接触调试端口复用的:
有关调试方式和介绍的内容在上方以说明;
参数中的SWJ就是SWD和JTAG这两中调试方式
- 首先第一个参数中的SWJ_NoJTRST就是解除JTRST引脚的复用,在引脚表中,NJTRST也就是PB4,如果使用这个参数,那么PB4就变成正常的GPIO口。
- 然后第二个参数中的SWJ_JTAGDisable,这个就是接触JTAG调试端口的复用,也就是说JTAG中PA15,PB3,PB4解除复用,变成GPIO口,上面的PA13,PA14是和SWD共用的端口,所以仍为SWD的调试端口不变。
- 最后第三个参数,SWJ_Disable,这个参数就是把SWD和JTAG的调试端口全部接解除,在引脚定义里,就是五个调试端口引脚全部变成普通的GPIO口,没有调试功能了。
- 注:所以第三个参数不要任意使用,一旦你调用这个参数并且开始下载程序后,你的调试端口就没有了,这之后在使用Link就下载不进去程序了,就只能使用串口下载,才能把调试端口弄回来。
总结一下就是:
- 你想让PA15,PB3,PB4三个引脚当做GPIO来使用的话就用这个代码:
先打开AFIO时钟,在使用AFIO(引脚重映射配置函数)将JTAG复用解除就可以了。
- 如果你想重映射定时器引脚或者其他外设的复用引脚
先打开AFIO时钟,再用AFIO重映射外设复用的引脚(变成另一个需要的引脚),就可以了。
- 如果你重映射的引脚又刚好是调试端口
那么这三行代码你就都得需要,首先打开AFIO的时钟,然后将端口重映射成你需要使用的端口,最后将这个调试端口变成正常的GPIO端口(不具备调试功能)即可。