打印
[应用相关]

STM32开发板例程讲解,GPIO的描述和配置,GPIO_IOTG例程精讲

[复制链接]
2005|66
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一、GPIO的综合描述
stm32每一个GPIO端口拥有2个32bits的configuration寄存器(GPIOx_CRL,GPIOx_CRH),2个32bits的数据寄存器(GPIOx_IDR,GPIOx_ODR),1个32bits的set/reset寄存器(GPIOx_BSRR),1个16bits的reset寄存器(GPIOx_BRR)和1个32bits的Lock寄存器(GPIOx_LCKR)。

使用特权

评论回复
沙发
和下土|  楼主 | 2021-8-4 10:00 | 只看该作者
(一)每一个IO引脚都可以使用软件配置为以下几种模式:

   1. 浮空输入
  2. 带上拉输入
  3. 带下拉输入
  4. 模拟输入
  5. 开漏输出——(此模式可实现hotpower说的真双向IO)
  6. 推挽输出
  7. 复用功能的推挽输出
  8. 复用功能的开漏输出
模式7和模式8需根据具体的复用功能决定。

使用特权

评论回复
板凳
和下土|  楼主 | 2021-8-4 10:04 | 只看该作者
每一个IO引脚都可以单独编程,但是每一个IO寄存器只能32bits访问(半字或者字节访问都被禁止)。

使用特权

评论回复
地板
和下土|  楼主 | 2021-8-4 10:05 | 只看该作者
(二)专门的寄存器(GPIOx_BSRR和GPIOx_BRR)实现对GPIO口的原子操作,即回避了设置或清除I/O端口时的“读-修改-写”操作,使得设置或清除I/O端口的操作不会被中断处理打断而造成误动作。

使用特权

评论回复
5
和下土|  楼主 | 2021-8-4 10:07 | 只看该作者
(三)每个GPIO口都可以作为外部中断的输入,便于系统灵活设计。

使用特权

评论回复
6
和下土|  楼主 | 2021-8-4 10:09 | 只看该作者
(四)I/O口的输出模式下,有3种输出速度可选(2MHz、10MHz和50MHz),这有利于噪声控制。

使用特权

评论回复
7
和下土|  楼主 | 2021-8-4 10:11 | 只看该作者
(五)所有I/O口兼容CMOS和TTL,多数I/O口兼容5V电平。

使用特权

评论回复
8
和下土|  楼主 | 2021-8-4 10:17 | 只看该作者
(六)大电流驱动能力:GPIO口在高低电平分别为0.4V和VDD-0.4V时,可以提供或吸收8mA电流;如果把输入输出电平分别放宽到1.3V和VDD-1.3V时,可以提供或吸收20mA电流。

使用特权

评论回复
9
和下土|  楼主 | 2021-8-4 10:18 | 只看该作者
(七)具有独立的唤醒I/O口

使用特权

评论回复
10
和下土|  楼主 | 2021-8-4 10:19 | 只看该作者
(八)很多I/O口的复用功能可以重新映射。

使用特权

评论回复
11
和下土|  楼主 | 2021-8-4 10:21 | 只看该作者
(九)GPIO口的配置具有上锁功能,当配置好GPIO口后,可以通过程序锁住配置组合,直到下次芯片复位才能解锁。此功能非常有利于在程序跑飞的情况下保护系统中其他的设备,不会因为某些I/O口的配置被改变而损坏——如一个输入口变成输出口并输出电流。

使用特权

评论回复
12
和下土|  楼主 | 2021-8-4 10:25 | 只看该作者
二、GPIO的结构

使用特权

评论回复
13
和下土|  楼主 | 2021-8-4 10:26 | 只看该作者
三、GPIO的配置



(一)   GPIO模式选择和速度匹配

(1) 浮空输入_IN_FLOATING ——浮空输入,可以做KEY识别,RX1。

  (2)带上拉输入_IPU——IO内部上拉电阻输入。

(3)带下拉输入_IPD—— IO内部下拉电阻输入。

(4) 模拟输入_AIN ——应用ADC模拟输入,或者低功耗下省电。

(5)开漏输出_OUT_OD ——IO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为1时,IO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样IO口也就可以由外部电路改变为低电平或不变。可以读IO输入电平变化,实现C51的IO双向功能。

(6)推挽输出_OUT_PP ——IO输出0-接GND, IO输出1 -接VCC,读输入值是未知的。

(7)复用功能的推挽输出_AF_PP ——片内外设功能(I 2C的SCL,SDA)

(8)复用功能的开漏输出_AF_OD——片内外设功能(TX1,MOSI,MISO.SCK)

使用特权

评论回复
14
和下土|  楼主 | 2021-8-4 10:31 | 只看该作者
GPIO输出的速度匹配:

GPIO_Speed_10MHz 最高输出速率10MHz

GPIO_Speed_2MHz 最高输出速率2MHz

GPIO_Speed_50MHz 最高输出速率50MHz

使用特权

评论回复
15
和下土|  楼主 | 2021-8-4 10:32 | 只看该作者
I/O口的输出模式下,有3种输出速度可选(2MHz、10MHz和50MHz),这个速度是指I/O口驱动电路的响应速度而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在I/O口的输出部分安排了多个不同响应速度的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路)。通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI性能。当然如果要输出较高频率的信号,但却选用了较低频率的驱动模块,很可能会得到失真的输出信号。

使用特权

评论回复
16
和下土|  楼主 | 2021-8-4 10:33 | 只看该作者
有一点是关键,即GPIO的引脚速度跟应用匹配(推荐10倍以上)。比如:
1) 对于串口,假如最大波特率只需115.2k,那么用2M的GPIO的引脚速度就够了,既省电也噪声小。

使用特权

评论回复
17
和下土|  楼主 | 2021-8-4 10:35 | 只看该作者
2 )对于I2C接口,假如使用400k波特率,若想把余量留大些,那么用2M的GPIO的引脚速度或许不够,这时可以选用10M的GPIO引脚速度。

使用特权

评论回复
18
和下土|  楼主 | 2021-8-4 10:36 | 只看该作者
3 )对于SPI接口,假如使用18M或9M波特率,用10M的GPIO的引脚速度显然不够了,需要选用50M的GPIO的引脚速度。

使用特权

评论回复
19
和下土|  楼主 | 2021-8-4 15:48 | 只看该作者
(二)   在STM32中如何配置片内外设使用的IO端口

①配置输入的时钟;②初始化后即被激活(开启);③如果使用该外设的输入输出管脚,则需要配置相应的GPIO端口(否则该外设对应的输入输出管脚可以做普通GPIO管脚使用);④再对外设进行详细配置。

对应到外设的输入输出功能有下述三种情况:
①外设对应的管脚为输出:需要根据外围电路的配置选择对应的管脚为复用功能的推挽输出或复用功能的开漏输出。
②外设对应的管脚为输入:则根据外围电路的配置可以选择浮空输入、带上拉输入或带下拉输入。
③ADC对应的管脚:配置管脚为模拟输入。

如果把端口配置成复用输出功能,则引脚和输出寄存器断开,并和片上外设的输出信号连接。将管脚配置成复用输出功能后,如果外设没有被激活,那么它的输出将不确定。

使用特权

评论回复
20
和下土|  楼主 | 2021-8-4 15:49 | 只看该作者
(三)     通用IO端口(GPIO)初始化:

1、 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | B | C, ENABLE):使能APB2总线外设时钟;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

102

主题

1061

帖子

0

粉丝