关于stm32中引脚的复用,重映射问题


实验平台

本次实验平台为stm32f103rbt6,使用标准库


一、问题提出

最近在使用stm32f03的板子做一些实验的时候,PB4引脚接蜂鸣器,配置完了GPIO后发现无论怎么写入值都无法改变引脚的电平。通过查阅资料发现该引脚在stm32f103下是属于JTAG下载调试相关的端口,需要进行一些另外的配置才可以当做普通IO使用。

二、问题解决

1.资料查阅

查阅stm32f103的数据手册

在这里插入图片描述
可以看出,PB4的主功能是NJTRST,NJTRST是仿真器调试时的JTAG对内核的调试复位信号引脚,一般用于信号调试,即当stm32复位时,首先该引脚会被NJTRST功能占用。
查阅stm32f10x参考手册
在这里插入图片描述
此处也可以看出,当处于完全复位状态,PA13,PA14,PA15,PB3,PB4都是不可以直接作为普通IO或者其他功能来使用的。

2.重映射问题

很显然,如果需要将PB4作为普通IO来使用,那就需要对其进行重映射,将其功能从NJTRST更改为PB4,在代码书写上则要求初始化GPIO时顺便调用重映射函数。需要说明的是,重映射时还需要初始化AFIO时钟。

	GPIO_InitTypeDef   GPIO_InitStructure;
	
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);

	/* 配置引脚重映射,禁用JTAG(主要是JTRST)功能,PB3、PB4、PA15定义为普通引脚 */
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE);
	
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;

    GPIO_Init(GPIOB,&GPIO_InitStructure);

此处,当我们点进去GPIO_PinRemapConfig()函数时会发现标准库对调试引脚的重映射有三个函数可以使用

  *     @arg GPIO_Remap_SWJ_NoJTRST      : Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST
  *     @arg GPIO_Remap_SWJ_JTAGDisable  : JTAG-DP Disabled and SW-DP Enabled
  *     @arg GPIO_Remap_SWJ_Disable      : Full SWJ Disabled (JTAG-DP + SW-DP)

通过官方注释可以很清晰的看出
1.GPIO_Remap_SWJ_JTAGDisable: PB3,PB4,PA15可以做普通IO使用,PA13&14用于SW调试

2.GPIO_Remap_SWJ_Disable: 5个引脚全部可以作为普通IO使用,但不能再用JTAG和SW调试,只能用st-link调试

3.GPIO_Remap_SWJ_NoJTRST:PB4可作为普通IO使用,JTAG&SWD正常使用,但JTAG没有复位功能

此外,当使用GPIO_Remap_SWJ_NoJTRST时,此时复位功能被重映射了,如果需要继续下载程序,需要按住复位键,然后点击下载程序,待程序开始下载再松开复位键。

3.复用和重映射比较

重映射和复用在代码书写上最大的区别就是,复用只需要将引脚配置为复用模式即可,而重映射则需要调用重映射函数并且大部分时候还需要打开AFIO时钟。

对于其本质来说

端口复用:STM32有很多的内置外设,这些外设的外部引脚都是与GPIO复用的。也就是说,一个GPIO如果可以复用为内置外设的功能引脚,那么当这个GPIO作为内置外设使用的时候,就叫做复用。

比如说,串口1 的发送接收引脚是PA9,PA10,当我们把PA9,PA10不用作普通的GPIO口,而用做复用功能串口1的发送接收引脚的时候,叫端口复用。简单来说就是当一个引脚不仅可以作为一个功能来使用,还能作为另外一个功能使用,就叫做复用。

重映射:每个内置外设都有若干个输入输出引脚,一般这些引脚的输出端口都是固定不变的,为了让设计工程师可以更好地安排引脚的走向和功能,在STM32中引入了外设引脚重映射的概念,即一个外设的引脚除了具有默认的端口外,还可以通过设置重映射寄存器的方式,把这个外设的引脚映射到其它的端口。端口复用的目的是为了使不同器件封装的外设IO功能数量达到最优。

比如,串口1的TX,RX引脚是在PA9,和PA10端口,但是同时它有两个映射端口PB6,PB7。开启重映射,PB6和PB7同样可以使用串口1。简单说就是,一个功能不仅能够在这个引脚上使用,还能再另外一个引脚上使用,就叫做重映射。


总结

附参考文章:
https://blog.csdn.net/qhw5279/article/details/72630637
https://www.pianshen.com/article/8637680257/
https://blog.csdn.net/qq_33553024/article/details/78887716

  • 15
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值