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的外设时钟。
|