STM32-GPIO外设详解

目录

一、GPIO简介

二、GPIO框图剖析

1、GPIO输出部分

1)保护二极管

2)P-MOS&N-MOS

 3)复用功能输出

4)输出数据寄存器、位置设置/清除寄存器

 2、GPIO输入部分

 1)输入模式(模拟/浮空/上拉/下拉)

2)复用功能输入


一、GPIO简介

GPIO是通用型输入输出端口的简称也可以交I/O端口,简单来说就是STM32的可控制引脚。将STM32的GPIO引脚与外部设备连接起来,即可实现与外部通讯、控制以及数据采集等功能。STM32的GPIO被分成了好多组,有A、B、C、D、E等每组又被分为了16个引脚。所有的GPIO引脚都有基本的输入输出功能,有些可能还会被复用成别的功能。

二、GPIO框图剖析

1、GPIO输出部分

1)保护二极管

引脚的俩个保护二极管可以防止外部过高或者过低的电压输入,防止不正常电压引入从而导致芯片损坏。尽管有这一层保护STM32的引脚也不能直接驱动功率较大的外设。如马达等。

2)P-MOS&N-MOS

GPIO的线路如果是向下的那就是输出模式,这里有一对MOS管组成的电路,这个结构使GPIO具有推挽输出开漏输出俩种模式。

推挽输出模式:在该结构中输入高电平,经过反向使上方P-MOS导通,下方的N-MOS管截止,对外输出高电平。在该结构中输入低电平,经过反向上方P-MOS截止,下方的N-MOS导通,对外输出低电平。当俩种电平切换时,俩个MOS管轮流导通,使得其负载能力和开关速度都比普通的方式有很大提高。这种模式输出的低电平为0V,高电平为3.3V。

下面是我画的一个等效电路

 开漏输出模式:在这个模式下上方的P-MOS完全不工作对于开漏输出和推挽输出的区别最普遍的说法就是开漏输出无法真正输出高电平,即 高电平时没有驱动能力,需要借助外部上拉电阻完成对外驱动。

原理是:我们控制输出为0,则P-MOS管关闭,N-MOS管导通,输出接地,若输出为1(上面说了无法真正的输出高电平)时,则俩MOS管都关闭,引脚不是输出高电平,也不是低电平,而对外显示高阻态,正常使用一般都要外部上拉电阻,这种特性我们也把他成为“线与”,也就是说,如果有多个开漏模式的GPIO脚连接在一起,只有所有脚都对外显示高阻态时,外部的上拉电阻才会提供高电平,若是有一个引脚为低那么整条线路都为低电平。

因为这个特性,我们一般选择输出模式时都会选择推挽输出模式,只有在I^{2}C、SMBUS通讯等需要“线与”特性的总线电路中我们才会使用开漏输出模式,且如果我们遇到电源不提配的场合,就可以吧GPIO引脚设置成开漏输出,外接上拉电阻,电源为5V。当输出高阻态时,上拉电阻和电源就可以向外输出5V的电压。

下面是我画的一个等效电路

 3)复用功能输出

复用输功能输出中的复用在上面GPIO的简介中提到一句GPIO的引脚会被复用成其他功能,是指其他片上外设对GPIO引脚进行控制时GPIO引脚会被作用成该外设共能的一部分,比如我们使用USART通讯时通常会把GPIO的某些引脚复用成USART的TXD(发送数据输出端)这里不细讲后面介绍USART外设时在详细介绍。

从其他外设引出来的复用功能输出信号还是会和GPIO本身的数据寄存器一起连接到双MOS管电路中,并不会单走。

4)输出数据寄存器、位置设置/清除寄存器

前面提到的双MOS管电路的输入信号,就是有GPIO-ODR(输出数据寄存器)提供的,因此我们修改ODR寄存器就可以改变输出电平,前面我们在用寄存器编程的时候我们就动手操作过,这里就不放寄存器的手册图和介绍如何使用了,如果不了解的可以取看看我前面的寄存器编程文章这里放个传送门:STM32-寄存器编程-使用寄存器点亮LED_学c入门到入土的博客-CSDN博客

GPIO-BSRR(位置设置/清除寄存器)可以通过修改自己的值间接的影响GPIO-ODR输出数据寄存器)的值从而影响输出的状态。

GPIO-BSRR分高16位与低16位,每次写入只能是一个字(16位)也就是我们的普通8421码,且低16位优先于高16位,如果高16位和低16位都被写入的数据优先低16位的结果。

 2、GPIO输入部分

 1)输入模式(模拟/浮空/上拉/下拉)

这里因为后三种输入模式过于简单就统一写入了模拟输入介绍章节,统称输入模式。

模拟输入:一般是GPIO作为ADC采集电压的输入通道时用作模拟输入,此功能不通过肖特基触发器,因为学过数字电路知道经过触发器后我们的信号会被处理成数字信号只有0、1俩种状态了。与我们要采集到的原始模拟信号是不相符的。同样当GPIO作为DAC模拟输出通道时,此时作为模拟输出功能,信号也不会通过双MOS管电路。

浮空输入:浮空输入引脚电平是不确定的,完全由外部输入决定。

上拉输入:上拉输入引脚是高电平,电路通过上拉电阻接VDD。

下拉输入:下拉输入引脚是低电平,电路通过下拉电阻接VSS。

2)复用功能输入

复用功能输入与复用功能输出模式类似,GPIO引脚工作在复用功能输入模式时由STM32的其他片上外设控制该引脚,比如USART通讯复用功能时,此GPIO引脚会被复用成RXD(接收数据输入端)这里不细讲后面介绍USART外设时在详细介绍。

到这里GPIO外设的所有知识以经介绍到位了,我们在配置GPIO脚的模式时脑子里就应该有这些东西。关注我后面我会更新所有STM32的特色外设介绍。

  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
回调函数是一种常用的函数编程技术,它允许我们在程序中注册一个函数,当某个事件发生时,系统会自动调用这个函数。在 STM32 的开发中,回调函数经常被用来处理各种外设中断事件。 在 STM32 中,回调函数通常被定义为一个函数指针,当外设中断发生时,系统会将这个指针指向的函数作为中断处理函数来执行。以下是一个简单的回调函数的示例: ``` void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { // 处理中断事件 } ``` 在上面的示例中,`HAL_GPIO_EXTI_Callback` 是一个回调函数,它被用于处理 GPIO 外设的中断事件。当中断事件发生时,系统会自动调用这个函数,并传入触发中断的 GPIO 引脚号作为参数。 需要注意的是,在使用回调函数时,我们需要先将回调函数注册到相应的外设中断处理函数中,例如: ``` HAL_GPIO_RegisterCallback(&hgpio, HAL_GPIO_EXTI_Callback); ``` 在上面的示例中,`HAL_GPIO_RegisterCallback` 函数用于将 `HAL_GPIO_EXTI_Callback` 函数注册到 `hgpio` 对应的 GPIO 外设中断处理函数中。这样,当 GPIO 外设的中断发生时,系统就会调用 `HAL_GPIO_EXTI_Callback` 函数来处理中断事件。 总之,回调函数是一种非常常用的函数编程技术,在 STM32 的开发中也经常被用于处理各种外设中断事件。在使用时,我们需要先将回调函数注册到相应的外设中断处理函数中,然后在回调函数中处理中断事件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值