外设GPIO

1. GPIO 简介

        GPIO 是控制或者采集外部器件的信息的外设,即负责输入输出。它按组分配,每组 16 个 IO 口,组数视芯片而定。STM32F103ZET6 芯片是 144 脚的芯片,具有 GPIOA、GPIOB、GPIOC、 GPIOD、GPIOE、GPIOF 和 GPIOG 七组 GPIO 口,共有 112 个 IO 口可供我们编程使用。这里 重点说一下 STM32F103 的 IO 电平兼容性问题,STM32F103 的绝大部分 IO 口,都兼容 5V,至 于到底哪些是兼容 5V 的,请看 STM32F103xE 的数据手册(注意是数据手册,不是中文参考手 册),见表 5 大容量 STM32F103xx 引脚定义,凡是有 FT 标志的,都是兼容 5V 电平的 IO 口, 可以直接接 5V 的外设(注意:如果引脚设置的是模拟输入模式,则不能接 5V!),凡是不带 FT 标志的,就建议大家不要接 5V 了,可能烧坏 MCU。

2. GPIO 基本结构分析

3. GPIO 八种功能模式

GPIO 有八种工作模式,分别是: 1、输入浮空 2、输入上拉 3、输入下拉 4、模拟输入 5、开漏输出 6、推挽输出 7、开漏式复用功能 8、推挽式复用功能

        2、输入上拉

        输入上拉模式:上拉电阻导通,施密特触发器打开,输出被禁止。在需要外部上拉电阻的 时候,可以使用内部上拉电阻,这样可以节省一个外部电阻,但是内部上拉电阻的阻值较大, 所以只是“弱上拉”,不适合做电流型驱动。

5、开漏输出

 开漏输出模式:STM32 的开漏输出模式是数字电路输出的一种,从结果上看它只能输出低 电平 Vss 或者高阻态,常用于 IIC 通讯(IIC_SDA)或其它需要进行电平转换的场景。根据 《STM32F10xxx 参考手册_V10(中文版).pdf》第 108 页关于“GPIO 输出配置”的描述,我们 可以知道开漏模式下,IO 是这样工作的:

⚫ P-MOS 被“输出控制”控制在截止状态,因此 IO 的状态取决于 N-MOS 的导通状况;

⚫ 只有 N-MOS 还受控制于输出寄存器,“输出控制”对输入信号进行了逻辑非的操作;

⚫ 施密特触发器是工作的,即可以输入,且上下拉电阻都断开了,可以看成浮空输入;

        图 13.1.2.7 中写入输出数据寄存器①的值怎么对应到 IO 引脚的输出状态② 是我们最关心的。根据参考手册的描述:开漏输出模式下 P-MOS 一直在截止状态,即不导通,所以 P-MOS 管的栅极相当于一直接 VDD。如果输出数据寄存器①的值为 0,那么 IO 引脚的输出状态②为 低电平,这是我们需要的控制逻辑,怎么做到的呢?是这样的,输出数据寄存器的逻辑 0 经过 “输出控制”的取反操作后,输出逻辑 1 到 N-MOS 管的栅极,这时 N-MOS 管就会导通, 使得 IO 引脚连接到 VSS,即输出低电平。如果输出数据寄存器的值为 1,经过“输出控制” 的取反操作后,输出逻辑 0 到 N-MOS 管的栅极,这时 N-MOS 管就会截止。又因为 P-MOS 管是一直截止的,使得 IO 引脚呈现高阻态,即不输出低电平,也不输出高电平。因此要 IO 引脚输出高电平就必须接上拉电阻。 又由于 F1 系列的开漏输出模式下,内部的上下拉电 阻不可用,所以只能通过接芯片外部上拉电阻的方式,实现开漏输出模式下输出高电平。 如果芯片外部不接上拉电阻,那么开漏输出模式下,IO 无法输出高电平。在开漏输出模式下,施密特触发器是工作的,所以 IO 口引脚的电平状态会被采集到输入数 据寄存器中,如果对输入数据寄存器进行读访问可以得到 IO 口的状态。也就是说开漏输出模式 下,我们可以读取 IO 引脚状态。

6、推挽输出

        推挽输出模式:STM32 的推挽输出模式,从结果上看它会输出低电平 VSS 或者高电平 VDD。推挽输出跟开漏输出不同的是,推挽输出模式 P-MOS 管和 N-MOS 管都用上。根 据手册描述可以把“输出控制”简单地等效为一个非门。

        如果输出数据寄存器①的值为 0,经过“输出控制”取反操作后,输出逻辑 1 到 P-MOS 管的栅极,这时 P-MOS 管就会截止,同时也会输出逻辑 1 到 N-MOS 管的栅极,这时 NMOS 管就会导通,使得 IO 引脚接到 VSS,即输出低电平。

        如果输出数据寄存器的值为 1 ,经过“输出控制”取反操作后,输出逻辑 0 到 N-MOS 管的栅极,这时 N-MOS 管就会截止,同时也会输出逻辑 0 到 P-MOS 管的栅极,这时 PMOS 管就会导通,使得 IO 引脚接到 VDD,即输出高电平。

        由上述可知,推挽输出模式下,P-MOS 管和 N-MOS 管同一时间只能有一个管是导通 的。当 IO 引脚在做高低电平切换时,两个管子轮流导通,一个负责灌电流,一个负责拉电 流,使其负载能力和开关速度都有较大的提高。 另外在推挽输出模式下,施密特触发器也是打开的,我们可以读取 IO 口的电平状态。 由于推挽输出模式下输出高电平时,是直接连接 VDD,所以驱动能力较强,可以做电流 型驱动,驱动电流最大可达 25mA,但是芯片的总电流有限,所以并不建议这样用,最好还 是使用芯片外部的电源。

7、开漏式复用功能

开漏式复用功能:一个 IO 口可以是通用的 IO 口功能,还可以是其他外设的特殊功能引脚, 这就是 IO 口的复用功能。一个 IO 口可以是多个外设的功能引脚,我们需要选择作为其中一个 外设的功能引脚。当选择复用功能时,引脚的状态是由对应的外设控制,而不是输出数据寄存 器。 另外在开漏式复用功能模式下,施密特触发器也是打开的,我们可以读取 IO 口的电平状 态,同时外设可以读取 IO 口的信息。

8、推挽式复用功能

推挽式复用功能:复用功能介绍请查看开漏式复用功能,结构分析请参考推挽输出模式。

4. GPIO 寄存器介绍

STM32F1 每组(这里是 A~D)通用 GPIO 口有 7 个 32 位寄存器控制,包括 :

2 个 32 位端口配置寄存器(CRL 和 CRH)

2 个 32 位端口数据寄存器(IDR 和 ODR)

1 个 32 位端口置位/复位寄存器(BSRR)

1 个 16 位端口复位寄存器(BRR)

1 个 32 位端口锁定寄存器 (LCKR)

⚫ 端口配置寄存器(GPIOx_CRL 和 GPIOx_CRH)

         这两个寄存器都是 GPIO 口配置寄存器,不过 CRL 控制端口的低八位,CRH 控制端口的 高八位。寄存器的作用是控制 GPIO 口的工作模式和工作速度。

⚫ 端口输出数据寄存器(GPIOx_ODR)

该寄存器用于控制 GPIOx 的输出高电平或者低电平。

⚫ 端口置位/复位寄存器(GPIOx_BSRR)

该寄存器也用于控制 GPIOx 的输出高电平或者低电平。

⚫ GPIO 端口输入数据寄存器(GPIOx_IDR)

         该寄存器用于存储 GPIOx 的输入状态,它连接到施密特触发器上,IO 口外部的电平信号 经过触发器后,模拟信号就被转化成 0 和 1 这样的数字信号,并存储到该寄存器中。寄存器描 述如图 所示。

        该寄存器低 16 位有效,分别对应每一组 GPIO 的 16 个引脚。当 CPU 访问该寄存器,如果 对应的某位为 0(IDRy=0),则说明该 IO 口输入的是低电平,如果是 1(IDRy=1),则表示输入的 是高电平,y=0~15。

5. 硬件设计

        几乎每个开发板都会板载有独立按键,因为按键用处很多。常态下,独立按键是断开的, 按下的时候才闭合。每个独立按键会单独占用一个 IO 口,通过 IO 口的高低电平判断按键的状 态。但是按键在闭合和断开的时候,都存在抖动现象,即按键在闭合时不会马上就稳定的连接, 断开时也不会马上断开。这是机械触点,无法避免。独立按键抖动波形图如上:

        图中的按下抖动和释放抖动的时间一般为 5~10ms,如果在抖动阶段采样,其不稳定状态可 能出现一次按键动作被认为是多次按下的情况。为了避免抖动可能带来的误操作,我们要做的 措施就是给按键消抖(即采样稳定闭合阶段)。消抖方法分为硬件消抖和软件消抖,我们常用软 件的方法消抖。 软件消抖:方法很多,我们例程中使用最简单的延时消抖。检测到按键按下后,一般进行 10ms 延时,用于跳过抖动的时间段,如果消抖效果不好可以调整这个 10ms 延时,因为不同类 型的按键抖动时间可能有偏差。待延时过后再检测按键状态,如果没有按下,那我们就判断这 是抖动或者干扰造成的;如果还是按下,那么我们就认为这是按键真的按下了。对按键释放的 判断同理。 硬件消抖:利用 RC 电路的电容充放电特性来对抖动产生的电压毛刺进行平滑出来,从而 实现消抖,但是成本会更高一点,本着能省则省的原则,我们推荐使用软件消抖即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值