STM32-GPIO工作方式

这篇具有很好参考价值的文章主要介绍了STM32-GPIO工作方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、GPIO的八种输入输出模式

GPIO端口的每个位可以由软件分别配置成八种输入输出模式。

1.1输入浮空模式

下图黄色区域是该种模式电路,此时上拉和下拉电阻的开关打开,施密特触发器打开。

在I/O口写入电平->进入输入驱动器->通过施密特触发器->进入输入数据寄存器,CPU读出

STM32-GPIO工作方式,stm32学习,stm32,嵌入式硬件,单片机

 输入浮空一般多用于外部按键输入。在输入浮空状态下,I/O口的电平状态不确定,由外部决定。

1.2输入上拉模式

基本结构和输入浮空模式差不多,区别在于此时输入上拉电阻的开关闭合。

由于上拉电阻的存在,可以把I/O口上的不确定的信号上拉至高电平,也就是说此种模式下I/O口默认为高电平。

STM32-GPIO工作方式,stm32学习,stm32,嵌入式硬件,单片机

1.3输入下拉模式

基本结构和输入浮空模式差不多,区别在于此时输入下拉电阻的开关闭合。

由于下拉电阻的存在,可以把I/O口上的不确定的信号拉低至低电平,也就是说此种模式下I/O口默认为低电平。

STM32-GPIO工作方式,stm32学习,stm32,嵌入式硬件,单片机

1.4输入模拟模式

模拟输入模式下,I/O端口的模拟信号(电压信号,而非电平信号)直接模拟输入到片上外设模块。

STM32-GPIO工作方式,stm32学习,stm32,嵌入式硬件,单片机

1.5开漏输出

CPU在输出数据寄存器写入电平->输出控制电路。

只能输出强低电平,高电平需要上拉电阻拉高。

当写入高电平时,N-MOS管截止导致I/O口的电平不是高电平,而是由外部的上拉或下拉电阻决定。也就是说输出电平由外接的上拉或者下拉电阻确定。同时I/O口电平也可以由输入工作模式读取进去。

当写入低电平时,此时N-MOS管处于导通状态,I/O口的电平会被N-MOS管拉低至Vss(低电平),也就是说此时I/O口输出低电平。同时I/O口电平也可以由输入工作模式读取进去。

STM32-GPIO工作方式,stm32学习,stm32,嵌入式硬件,单片机

输出端相当于三极管的集电极,要得到高电平需要上拉电阻,适合于做电流型驱动吸收电流的能力相对较强(一般20mA以内)。

以下为具体实现结构:

STM32-GPIO工作方式,stm32学习,stm32,嵌入式硬件,单片机

输入高电平时,经过反相器,此时G点为低电平,UG=US,MOS管截止,输出电压由VDD决定,输出高电平;

输入低电平时,经过反相器,此时G点为高电平,UG>US,MOS管导通,输出电压被拉低至Vss(低电压);

图中N-MOS管中的二极管是寄生二极管,起到保护MOS管的作用。当DS极之间的电压过高时,这个寄生二极管会反向击穿,让大电流流入地中,从而保护了MOS管。

详解请看:MOS管知识通俗易懂教程 - 知乎

1.6开漏复用输出

可以理解为GPIO口被用作第二功能时的配置情况(即并非作为通用IO口使用),端口必须配置成复用功能输出模式(推挽或开漏),同时得到高电平也需要上拉电阻。

STM32-GPIO工作方式,stm32学习,stm32,嵌入式硬件,单片机

1.7推挽输出

不需要上拉电阻即可实现高低电平的输出,可作为双向I/O口使用。

可以输出强高低电平,基本结构和开漏输出类似。

对于推挽输出控制电路输出为“1”时,P-MOS导通,N-MOS截止,I/O口输出高电平;

当控制电路输出为“0”时,P-MOS截止,N-MOS导通,I/O口输出低电平;

同时I/O口电平也可以由输入工作模式读取进去。

STM32-GPIO工作方式,stm32学习,stm32,嵌入式硬件,单片机

以下为具体实现结构:

STM32-GPIO工作方式,stm32学习,stm32,嵌入式硬件,单片机

输入高电平时,经过反相器,此时G点为低电平,NMOS管UG=US,NMOS管截止,而PMOS管Ugs>0,PMOS管导通,输出高电平(被VDD拉高);

输入低电平时,经过反相器,此时G点为高电平,PMOS管US=UG,PMOS管截止,而NMOS管UG>US,NMOS管导通,输出电压被拉低至Vss(低电压);

1.8推挽复用输出

GPIO口被用作第二功能时的配置的情况。

STM32-GPIO工作方式,stm32学习,stm32,嵌入式硬件,单片机

 二、GPIO相关配置寄存器

stm32共有七组GPIO,分别为GPIOA~GPIOG;

每组GPIO共有16个I/O口,例如GPIOA0~GPIOA15;

每组GPI/O端口有:

两个32位配置寄存器

  • GPIOx_CRL:端口配置低寄存器
  • GPIOx_CRH:端口配置高寄存器

两个32位数据寄存器 

  • GPIOx_IDR:端口输入寄存器
  • GPIOx_ODR:端口输出寄存器

一个32位置位/复位寄存器

  • GPIOx_BSRR:端口位设置/清除寄存器

一个16位复位寄存器

  • GPIOx_BRR:端口位清除寄存器

一个32位锁定寄存器

  • GPIOx_LCKR:端口配置锁存寄存器

 每组I/O口含有上面的七个寄存器,进而控制每组I/O的16个I/O口。

2.1端口配置寄存器 

上面的两个32位端口配置寄存器(GPIOx_CRL和GPIOx_CRH)他们每四位才能控制一个I/O口,也就是说一个32位端口配置寄存器能控制32/4=8个I/O口,两个32为端口配置寄存器才能控制每组I/O的16个I/O口。

假设是GPIOA,CRL控制低八位(PA0~PA7),CRH控制高八位(PA8~PA15)

2.1.1端口配置低寄存器(GPIOx_CRL)

STM32-GPIO工作方式,stm32学习,stm32,嵌入式硬件,单片机

可以看到上图有16个小方块, 每个小方块包含两位,则两个小方块控制一个I/O口。

STM32-GPIO工作方式,stm32学习,stm32,嵌入式硬件,单片机

 这四位中MODE0[1:0]控制输入输出的模式及输出模式的端口速率(看下图),看其英文MODE就是模式的意思。

STM32-GPIO工作方式,stm32学习,stm32,嵌入式硬件,单片机

 CNF0[1:0]控制输入输出的哪种模式(看下图)

STM32-GPIO工作方式,stm32学习,stm32,嵌入式硬件,单片机

 需要指出的是在输入模式下1 0 到底是上拉还是下拉模式,涉及到后面的寄存器,这里不做分析。

但是可以看下图先了解一下

STM32-GPIO工作方式,stm32学习,stm32,嵌入式硬件,单片机

 2.1.2端口配置高寄存器(GPIOx_CRH)

CRL和CRH的作用是一样的,区别在于CRH控制标号为8~15的I/O口。

STM32-GPIO工作方式,stm32学习,stm32,嵌入式硬件,单片机

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

IDR寄存器的低16位,每个位控制该组I/O的16个I/O口,每个位对应的是此I/O口的输入电平是高电平还是低电平。

STM32-GPIO工作方式,stm32学习,stm32,嵌入式硬件,单片机

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

和IDR类似,ODR寄存器的低16位,每个位控制该组I/O的16个I/O口,每个位对应的是此I/O口的输出电平是高电平还是低电平。

STM32-GPIO工作方式,stm32学习,stm32,嵌入式硬件,单片机

前面提过,ODR寄存器还可以配置在输入模式下是上拉还是下拉,在输入模式下ODR可以配置成上拉或者下拉模式,在输出模式下可以配置I/O口的输出电平。

STM32-GPIO工作方式,stm32学习,stm32,嵌入式硬件,单片机

 2.4端口位设置/清除寄存器(GPIOx_BSRR)

STM32-GPIO工作方式,stm32学习,stm32,嵌入式硬件,单片机

这个寄存器也可以配置I/O口输出是高电平还是低电平,它的低16位,可以设置I/O口输出模式。

假如设置为1,则对应的ODR寄存器的位为1,设置为0,则不对ODR寄存器对应的位产生任何影响。

而高16位则相反:

STM32-GPIO工作方式,stm32学习,stm32,嵌入式硬件,单片机

那么这样一来好像端口位设置/清除寄存器也能达到控制输出电平的目的?

前面我们学过原理图,CPU首先写入端口位设置/清除寄存器,然后由它达到控制端口数据输出寄存器的目的。

STM32-GPIO工作方式,stm32学习,stm32,嵌入式硬件,单片机

 有些人觉得多此一举,明明都可以通过端口数据输出寄存器设置输出电平了为什么还要搞一个“太上皇”控制它呢?

欸,在某些实时场景里面大有作为!

我是初学者,不甚清除,看这个:

STM32F10x系列GPIO寄存器BRR、BSRR、ODR、IDR的使用理解(1) - 知乎

https://www.cnblogs.com/shangdawei/p/4723941.html

2.5端口位清除寄存器(GPIOx_BRR)

BRR寄存器实际上作用不是很大,作用和BSRR高16位的作用是一样的。所以在实际的使用过程中,我们通常使用BSRR的低16位,和BRR的低16位(所以BSRR的高16位不经常使用)

STM32-GPIO工作方式,stm32学习,stm32,嵌入式硬件,单片机

STM32-GPIO工作方式,stm32学习,stm32,嵌入式硬件,单片机

2.6端口配置锁存寄存器(GPIOx_LCKR)

用的比较少,暂时先不作讨论

STM32-GPIO工作方式,stm32学习,stm32,嵌入式硬件,单片机

 三、stm32引脚说明

3.1端口复用功能

stm32有144个引脚,前面知道他有112个I/O口,那这样对于资源的分配就太不合理了,比如用于外设的资源就非常少了,所以STM32的大部分端口都具有复用功能。

所谓复用,就是一些端口不仅仅可以做为通用IO口,还可以复用为一些外设引脚,比如PA9,PA10可以复用为STM32的串口1引脚。

作用:最大限度的利用端口资源

STM32-GPIO工作方式,stm32学习,stm32,嵌入式硬件,单片机

 3.2端口重映射功能

就是可以把某些功能引脚映射到其他引脚。比如串口1默认引脚是PA9,PA10可以通过配置重映射映射到PB6,PB7

作用:方便布线

待补充,待更新...文章来源地址https://www.toymoban.com/news/detail-815719.html

到了这里,关于STM32-GPIO工作方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32的时钟系统(嵌入式学习)

    时钟是指用于计量和同步时间的装置或系统。时钟是嵌入式系统的脉搏,处理器内核在时钟驱动下完成指令执行,状态变换等动作,外设部件在时钟的驱动下完成各种工作,例如:串口数据的发送、AD转换、定时器计数等。因此时钟对于计算机系统是至关重要的,通常时钟系

    2024年02月16日
    浏览(35)
  • STM32串口通信详解(嵌入式学习)

    时钟信号在电子领域中是指用于同步和定时电路操作的周期性信号。它在数字系统和通信系统中起着至关重要的作用,用于协调各个组件之间的数据传输和操作。 时钟信号有以下几个重要的方面: 频率:时钟信号的频率是指单位时间内信号周期的数量。它通常以赫兹(Hz)为

    2024年02月09日
    浏览(58)
  • 嵌入式学习笔记——STM32的时钟树

    在之前的所有代码编程的过程中,似乎每次都绕不开一个叫做时钟使能的东西,当时我们是在数据手册上直接看其挂接在那条时钟线上的,那么STM32内部的时钟到底是怎么一个构型呢,本文来对此做一个介绍。 老规矩,一个新的名词出现,首先需要搞清楚它是个啥,下图中对

    2024年02月02日
    浏览(41)
  • STM32的中断系统详解(嵌入式学习)

    中断是处理器中的一种机制,用于响应和处理突发事件或紧急事件。当发生中断时,当前正在执行的程序会被暂时中止,处理器会跳转到中断处理程序(也称为中断服务例程),对中断事件进行处理。处理完中断后,处理器再返回到被中断的程序继续执行。 中断可以分为内部

    2024年02月12日
    浏览(59)
  • 嵌入式开发--STM32用DMA+IDLE中断方式串口接收不定长数据

    之前讲过用 利用IDLE空闲中断来接收不定长数据 ,但是没有用到DMA,其实用DMA会更加的高效,MCU也可以腾出更多的性能去处理应该做的事情。 IDLE顾名思义,就是空闲的意思,即当监测到串口空闲超过1个串口的数据帧时,会使状态寄存器(SR或ISR)的IDLE位置位,如果此时控制

    2024年04月17日
    浏览(52)
  • 嵌入式学习stm32基础知识(期末复习)

    1. 计算机的体系架构 冯诺依曼架构 ​ 在完整的计算机系统中,包含五个部分,储存器,运算器,控制器输入设备和输出设备。 改进的冯诺依曼架构 改进型架构的各模块的高速数据交换中心利用储存器这个大容量,极大的提高了效率。 哈佛架构 ​ 哈佛结构数据空间和地址

    2024年02月07日
    浏览(50)
  • STM32开发环境搭建&工程创建(嵌入式学习)

    简介 STM32CubeMX是STMicroelectronics公司提供的一款集成开发环境(IDE)工具,用于快速配置和初始化STM32微控制器系列的软件工程。它提供了图形化界面和交互式工具,使开发者能够轻松地生成STM32微控制器的初始化代码和配置文件。 STM32CubeMX具有以下主要功能和特点: 微控制器

    2024年02月11日
    浏览(47)
  • 嵌入式学习笔记——STM32硬件基础知识

    上一篇中我们重点是讲了一下怎么搭建开发环境以及怎么下载烧录的过程,这都是解决的电脑端的开发环境问题,还没有到实际的开发板上,我们的单片机是都是焊接在开发板上的,PCB上有着它所需的工作电路。并不是直接给供电电压就可以让其工作的,本文主要是简介一下

    2024年01月22日
    浏览(51)
  • STM32的定时器详解(嵌入式学习)

    想要了解STM32的时钟系统 点击这里跳转——》STM32的时钟系统(嵌入式学习) 建议先看看时钟树如何配置 点击这里跳转——》STM32的时钟树配置(嵌入式学习) 跳转——》STM32的时钟基础详解(嵌入式学习) 跳跳转——》STM32的时钟源详解(嵌入式学习) SysTick又称滴答定时

    2024年02月13日
    浏览(50)
  • STM32&ARM体系结构(嵌入式学习)

    STM32是意法半导体(STMicroelectronics)公司推出的一系列32位ARM Cortex-M微控制器(MCU)产品系列。它们基于ARM架构,并且具有广泛的应用领域,包括工业自动化、消费电子、医疗设备、通信、汽车电子等。 STM32系列提供了多个产品系列,以满足不同应用需求和性能要求。其中常见

    2024年02月08日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包