GPIO介绍

GPIO简介

1、GPIO简介

General Purpose Input Output (通用输入/输出)简称为GPIO,或总线扩展器,人们利用工业标准I2C、SMBus或SPI接口简化了I/O口的扩展。当微控制器或芯片组没有足够的I/O端口,或当系统需要采用远端串行通信或控制时,GPIO产品能够提供额外的控制和监视功能。

与ARM 的几组GPIO引脚,功能相似,GPxCON 控制引脚功能,GPxDAT用于读写引脚数据。另外,GPxUP用于确定是否使用上拉电阻。 x为A,B,,H/J, GPAUP没有上拉电阻。

2、GPIO的作用:

1、----输出值可写(高=1,低=0)
2、----输入值可读(高=1,低=0)
3、----输入经常被用作中断信号,通常是边沿触发,但也有可能是电平触发。 这些中断可以配置为系统唤醒事件,从而将系统从低功耗模式唤醒。
4、----一个GPIO经常被配置为输入/输出双向,根据不同的产品单板需求,但也存在单向的情况。
5、----大多是GPIO可以在获取到spinlock自旋锁时访问,但那些通过串行总线访问的通常不能如此操作(休眠的原因)。一些系统中会同时存在这两种形式的GPIO。

3、什么是管脚复用?

所谓的管脚复用,就是除第一功能外,增加了第二功能,如单片机89C51的P3 I/O口同时还为中断管脚,主要为节约芯片面积。当然在利用程序控制时是不会影响的

4、为何要有管脚复用?

芯片上的引脚资源不够用;芯片上,为了更高效率的利用引脚资源;就可能会出现引脚复用。
同样的一组引脚,pin脚:可以被设置(通过软件配置对应的寄存器去控制)为不同的功能,这样就可以实现可以根据实际需要,在不同的情况下,使用同一组引脚,实现不同的功能,用于不同的功能。

5、GPIO管脚的复用功能重映:

1、复用功能:内置外设是与I/O口共用引出管脚(不同的功能对应同一管脚)STM32 所有内置外设的外部引脚都是与标准GPIO引脚复用的,如果有多个复用功能模块对应同一个引脚,只能使能其中之一,其它模块保持非使能状态。

2、重映射功能:复用功能的引出脚可以通过重映射,从不同的I/O管脚引出,即复用功能的引出脚位是可通过程序改变到其他的引脚上!

直接好处:PCB电路板的设计人员可以在需要的情况下,不必把某些信号在板上绕一大圈完成联接,方便了PCB的设计同时潜在地减少了信号的交叉干扰。如:USART1:0: 没有重映像(TX/PA9,RX/PA10);1: 重映像(TX/PB6,RX/PB7)[0,1为一寄存器的bit值]

6、下述复用功能的引出脚具有重映射功能:

- 晶体振荡器的引脚在不接晶体时,可以作为普通I/O口

- CAN模块;
   - JTAG调试接口;
   - 大部分定时器的引出接口;
   - 大部分USART引出接口
   - I2C1的引出接口;
   - SPI1的引出接口;

举例:对于STM32F103VBT6,47引脚为PB10,它的复用功能是I2C2_SCL和 USART3_TX,表示在上电之后它的默认功能为PB10,而I2C2的SCL和USART3的TX为它的复用功能;
  另外在TIM2的引脚重映射后,TIM2_CH3也成为这个引脚的复用功能。

(1)要使用STM32F103VBT6的47、48脚的USART3功能,则需要配置47脚为 “复用推挽输出” “复用开漏输出”配置48脚为某种输入模式,同时使能USART3并保持I2C2的非使能状态。

(2)使用STM32F103VBT6的47脚作为TIM2_CH3,则需要对TIM2进行重映射,然后再按复用功能的方式配置对应引脚。

下面跟大家说一下STM32单片机的端口重映射,因为是以自己为实例。这里是以USART1的重映射为例:

STM32上有很多I/O口,也有很多的内置外设例如I2C,ADC,ISP,USART等,为了节省引出管脚,这些内置外设基本上是与I/O口共用管脚的,也就是I/O管脚的复用功能。但是STM32还有一特别之处就是:很多复用内置的外设的I/O引脚可以通过重映射功能,从不同的I/O管脚引出,即复用功能的引脚是可通过程序改变的。

7、gpio管脚的复用功能分析

以上是我在配置GPIO管脚PA9 PA10时没有发现的复用功能,

gpio管脚的复用功能分析

直到我添加了RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);这个函数才通。

gpio管脚的复用功能分析

8、重映射步骤:**

1.打开重映射时钟和USART重映射后的I/O口引脚时钟, RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE);

2.*I/O口重映射开启。

GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);

  3.*配制重映射引脚*, 这里*只需配置重映射后的I/O*,原来的不需要去配置。 

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_InitStructure);

只需要这三步,串口就可以正常使用了,简单吧? 但是我纠结了大半个小时才搞定的,好多事情都是说起来容易做起来难的,希望我以后多多进步。不要眼高手低,嗯我正朝这个方向前进。

9、总结:

简单的说 STM32的io有3个功能一个是默认的一个是复用一个是重映射功能(这个其实也属于复用)
  如果配置成复用则将使用第2个功能如果配置成复用同时相应的重映射配置了则将使用第3个功能
  通常一个口的复用+重映射有好多不止两个这时候就看你使能哪个设备了(哪个被使能就用哪个)
  开复用 + 使能设备+ 是否重映射就可以决定这个io口到底使用哪个功能 别忘了开启USART1的外设时钟。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值