STM32的GPIO内部结构及相关寄存器

发布者:泉地水无痕最新更新时间:2018-12-21 来源: eefocus关键字:STM32  GPIO  内部结构  寄存器 手机看文章 扫描二维码
随时随地手机看文章

学完大二上学期51单片机课程的寒假,在家我就开始捣鼓STM32了,记得那时候接触STM32感觉它很难,20多天下来就学习了RCC时钟体系和GPIO控制模块,开学后又开始忙一些有的没的,STM32的学习也搁置了,以至于后来跟学校当时在念博的老师交流时,我是这样描述我的STM32开发水平的:“我只会用GPIO写流水灯程序”,说来汗颜。


最近一阵子又回归STM32学习之旅,对于GPIO模块其实很不想写文章,感觉在炒冷饭,不过,认真考虑后还是敲起了键盘,对于概念性的东西还是做一下笔记吧,编程方面的,挺简单,相关资料很多,就不记录了。


1. GPIO简介


GPIO是通用输入/输出端口的简称,是STM32可控制的引脚。GPIO的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。最简单的helloworld级别的例子: 将GPIO引脚接到LED灯,通过控制引脚的输出高、低电平试下开关控制LED;将按键接到GPIO引脚,通过读取GPIO引脚区分按键是按下还是松开。


接下来干嘛?肯定是上那副经典的GPIO内部结构图了:


这里写图片描述


1.1 保护二极管


IO引脚上下两边两个二极管用于防止引脚外部过高/过低的电压输入,当引脚电压高于VDD时,上方的二极管导通,当引脚电压低于VSS时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁。但是尽管如此,还是不能直接外接大功率器件,须加大功率及隔离电路驱动,防止烧坏芯片或者外接器件无法正常工作。


1.2 P-MOS管和N-MOS管


图中红色箭头2方向为输出模式的GPIO,由P-MOS管和N-MOS管组成的单元电路使得GPIO具有“推挽输出”和“开漏输出”的模式。这两个MOS管接管电路的输入信号是由GPIO的输出数据寄存器GPIOx_ODR提供的,也就是我们可以通过编程修改GPIOx_ODR寄存器的值从而影响该单元电路的输出。 


常用的还用置位/复位寄存器GPIOx_BSRR和复位寄存器GPIOx_BRR,设置这两个寄存器后也能影响GPIOx_ODR,进而影响单元电路输出。 


除此,还有复用功能输出,意思是指STM32的其它片上外设对GPIO引脚进行控制,此时该引脚作为外设功能的一部分。片上外设数据信号作为双MOS管接管的输入,进而输出到GPIO引脚中。例如USART串口通讯,要用到某个GPIO 引脚作为通讯发送引脚,就可以把该GPIO 引脚配置成USART 串口复用功能,由串口外设控制该引脚,发送数据。


1.3 TTL肖特基触发器


图中红色箭头1方向为输入模式的GPIO,GPIO引脚经过内部上/下拉电阻配置成上/下拉、或者浮空输入,然后连接到触发器。信号经过触发器后,模拟信号转化为0和1的数字信号,然后存储在输入寄存器GPIOx_IDR中,通过读取GPIOx_IDR寄存器就可以知道GPIO的电平状态。 


同理,与复用功能输出类似,这里也有复用功能输入,GPIO引脚的输入信号会传输到STM32的其他片上外设,由外设去读取该引脚状态。例如使用USART串口通讯,用某个GPIO引脚作为通讯的接收引脚。 


另外,当GPIO引脚作为ADC采集电压的输入通道时,用其“模拟输入”功能,此时信号不再经过触发器进行TTL电平转换。ADC外设要采集到的原始的模拟信号。类似的,当GPIO引脚用于DAC模拟电压输出通道时,此时作为“模拟输出”功能,DAC信号输出不经过双MOS管。


2. GPIO的工作模式

GPIO的硬件结构,决定了GPIO可以配置成的工作模式有:


typedef enum

{ GPIO_Mode_AIN = 0x0,              //模拟输入

  GPIO_Mode_IN_FLOATING = 0x04, //浮空输入

  GPIO_Mode_IPD = 0x28,             //下拉输入

  GPIO_Mode_IPU = 0x48,             //上拉输入

  GPIO_Mode_Out_OD = 0x14,          //开漏输入


  GPIO_Mode_Out_PP = 0x10,          //推挽输出

  GPIO_Mode_AF_OD = 0x1C,           //复用开漏输出

  GPIO_Mode_AF_PP = 0x18            //复用推挽输出

}GPIOMode_TypeDef;


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


GPIO在输入模式中,肖特基触发器被打开,输出被禁止,通过GPIOx_IDR读取I/O状态。上拉/下拉输入,其默认电平由上拉/下拉决定,浮空输入的电平则是不确定的,完全由外部决定,一般按键就是采用浮空输入;模拟输入用于ADC采样。


2.2 输出模式(推挽/开漏)


GPIO在输出模式中,肖特基触发器同样被打开着的,即输入可用,这样通过输入数据寄存器GPIOx_IDR可以读取到IO实际状态。推挽模式时,双MOS以轮流方式工作,开漏模式下,只有N-MOS管工作。输出寄存器GPIOx_ODR可控制是输出高低电平;输出的速率可配,有2MHz/10MHz/50MHz。频率越高,功耗越大,效率也越高。


2.3 复用功能


复用功能中,输出输入都使能,可工作与开漏或推挽模式,但是输出信号源于片上外设,输出数据寄存器GPIOx_ODR无效,输入寄存器GPIOx_IDR仍然有效,可通过它获取IO实际状态,片上外设相关寄存器也是通过GPIOx_IDR获取该数据信号。


控制GPIO端口工作模式寄存器是GPIOx_CRL和GPIOx_CRH,它们都是32位的寄存器,分别管控GPIO的低8位IO和高8位IO。另外涉及到的寄存器还有: 


GPIOx_ODR: 设置输出数据 

GPIOx_IDR:读取输入数据 

GPIOx_BSRR:置1/清零GPIO的相应引脚 

GPIOx_BRR:清零GPIO的相应引脚 


这些寄存器的设置参照STM32中文参考手册即可,很简单,不赘述。另外,要让GPIO正常工作,记得打开GPIO的时钟。


关键字:STM32  GPIO  内部结构  寄存器 引用地址:STM32的GPIO内部结构及相关寄存器

上一篇:STM32标准外设库函数SetSysClockTo72(void)
下一篇:STM32L0 SysTick无法进入中断怎么处理

推荐阅读最新更新时间:2024-03-16 16:21

STM32 GPIO寄存器的相关知识
一、前言 在之前的STM32的GPIO理论基础知识中,分别对基本结构和工作模式进行了详细的介绍。 GPIO基本结构中主要对GPIO内部的各个功能电路逐一的进行的分析; GPIO工作模式中主要介绍GPIO应用在不同的使用场景下,GPIO端口的静态特征配置和动态的工作模式,同时对信号的工作流进行了分析。 这一篇主要对GPIO模块使用到的寄存器进行详细的分析介绍,适当了解GPIO寄存器的相关知识,可以对GPIO最底层的一些配置和工作原理有更好的认识,有助于加深对GPIO基本结构及工作模式的理解,同时对后续介绍到的GPIO在应用设计中有较好的帮助。 二、寄存器概述 图1为STM32的GPIO模块中寄存器的概述,总共有5种类型的寄存
[单片机]
<font color='red'>STM32</font> <font color='red'>GPIO</font><font color='red'>寄存器</font>的相关知识
STM32中的WFI和WFE指令的意思
进入低功耗模式的两个指令,这是ARM里CMSIS内核中的指令。详情请参考链接里大神们的讨论链接http://www.wowotech.net/armv8a_arch/wfe_wfi.html cmsis_arm.cc里有如下说明 /** brief Wait For Interrupt details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. */ #define __WFI __wfi /** brief Wait For E
[单片机]
STM32的DMA多通道多数据AD转换
描述:用ADC连续采集11路模拟信号,并由DMA传输到内存。ADC配置为扫描并且连续转换模式,ADC的时钟配置为12MHZ。在每次转换结束后,由DMA循环将转换的数据传输到内存中。ADC可以连续采集N次求平均值。最后通过串口传输出最后转换的结果。 程序如下: #i nclude stm32f10x.h //这个头文件包括STM32F10x所有外围寄存器、位、内存映射的定义 #i nclude eval.h //头文件(包括串口、按键、LED的函数声明) #i nclude SysTickDelay.h #i nclude UART_INTERFACE.h #i nclude #define N 50 //每通道采50次
[单片机]
由浅入深尽享STM32标准库开发的乐趣
摘要:从STM32新建工程、编译下载程序出发,让新手由浅入深,尽享STM32标准库开发的乐趣。 自从CubeMX等图像配置软件的出现,同学们往往点几下鼠标就解决了单片机的配置问题。对于追求开发速度的业务场景下,使用快速配置软件是合理的,高效的,但对于学生的学习场景下,更为重要的是知其然并知其所以然。 以下是学习(包括但不限于)嵌入式的三个重要内容, 1、学会如何参考官方的手册和官方的代码来独立写自己的程序。 2、积累常用代码段,知道哪里的问题需要哪些代码处理。 3、跟随大佬步伐,一步一个脚印。 首先:我们都知道编程时一般查的是《参考手册》,而进行芯片选型或需要芯片数据时,查阅的是《数据手册》。此外市面上所有关于STM32的
[单片机]
由浅入深尽享<font color='red'>STM32</font>标准库开发的乐趣
STM32学习——两轮平衡小车之硬件设计
这篇文先写最开始的电路设计,之后会更新后续的代码编写和小车调试。 电路设计的基本过程一般是这样的:需求分析——元件选型——原理图设计——PCB设计——焊接调试。 需求分析:在这里,主要是确定小车需要哪些模块、外设或接口。首先,stm32最小系统是必须的,这是小车控制的核心。然后小车的两个轮子需要两个H桥驱动和编码器接口。需要陀螺仪感知小车的姿态(包括倾角,转向角,角速度等)。需要一些调试和指示用的外设(蜂鸣器,LED等)。需要电源电路为系统供电。需要电池电压采集电路来实时采集电池电压,做低压报警,防止电池过放。需要下载接口和调试用的串口。基本就是根据自己想要实现功能,然后确定需要那些部分的电路。 元件选型:为需要的各个
[单片机]
<font color='red'>STM32</font>学习——两轮平衡小车之硬件设计
STM32学习记录16 ucosii+UCGUI
主要介绍下UCGUI的修改: 1:GUI_X_ucos.c文件夹,第80行,修改为: /* ********************************************************************************************************* * GUI_X_ExecIdle() ********************************************************************************************************* */ void GUI_X_E
[单片机]
<font color='red'>STM32</font>学习记录16 ucosii+UCGUI
STM32+WK2124 SPI转4路串口驱动程序
WK2124 SPI接口 四通道通用异步收发器 1. 产品概述 WK2124是SPITM 接口的4通道UART器件。WK2124实现SPI桥接/扩展4个增强功能串口(UART)的功能。 扩展的子通道的UART具备如下功能特点: 每个子通道UART的波特率、字长、校验格式可以独立设置,最高可以提供2Mbps的通信速率。 每个子通道可以独立设置工作在IrDA红外通信。 每个子通道具备收/发独立的256 级FIFO,FIFO的中断可按用户需求进行编程触发点且具备超时中断功能。 WK2124采用SSOP20绿色环保的无铅封装,可以工作在2.5~5.0V的宽工作电压范围,具备可配置自动休眠/唤醒功能。 WK2124引脚图: WK21
[单片机]
STM32+WK2124 SPI转4路串口驱动程序
STM32-点亮LED灯(GPIO配置)
点亮LED灯应该是每一人学习硬件的第一个实验了吧!从51到32在到ARM,废话少说,下面开始使用STM32点亮LED灯。 GPIO:又叫通用输入输出口,是微控制器必不可少的外设单元,用来和外界进行信号传递,数据交互的接口。 STM32的GPIO根据型号的不同分为A-H组,每一组都称为GPIOx组,每组都有独立的寄存器,因为相对于寄存器,函数版的使用还是比较容易入门的,尤其是有些编程基础的人来讲,但是寄存器是不可以忽视的,学会了基础的函数操作还是要回头去看看具体寄存器是如何运行的,这点很重要,高手和菜鸟的区别吧! STM32的GPIO还具有十分强大复用功能,这点以后会介绍和使用到。现在就把它的GPIO当成一个可输出高低电平的引脚就可
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved