STM32 GPIO的8种工作模式及相关配置寄存器

发布者:BlissfulJourney最新更新时间:2018-08-26 来源: eefocus关键字:STM32  GPIO  工作模式  配置寄存器 手机看文章 扫描二维码
随时随地手机看文章

GPIO八种工作模式

四种输入: 

GPIO_Mode_IPU(上拉输入) 
GPIO_Mode_IPD(下拉输入) 
原理: 经过上拉开关和下拉开关的连接,再经过触发器转化为0,1的数字信号,存储到数据寄存器中,然后我们就可以通过配置寄存器CRL,CRH控制这两个开关。 
用法: 若GPIO引脚配置为上拉输入模式,在默认状态下(GPIO引脚无输入),取得的GPIO引脚数据为1,既高电平. 而下拉输入模式则是相反的,在默认状态下其引脚数据为0,低电平.

GPIO_Mode_IN_FLOATING(浮空输入) 
原理: 不接上拉和下拉开关,直接经由触发器输入. 
用法: 若配置成这个模式可以用电表测量其引脚电压是1点几伏(不确定的值).由于输入阻抗较大,一般把这种模式用于标准的通讯协议例如:I2C,USART的接收端.

GPIO_Mode_AIN(模拟输入) 
原理: 直接关闭触发器,不接上拉和下拉开关,由另一路开关传至片上外设模块. 
用法: 例如传送至ADC模块时,就由ADC采集电压信号.(使用ADC外设的时候,必须是设置为模拟输入模式).

四种输出: 
GPIO_Mode_Out_PP(普通推挽输出) 
原理: 经过一个由P_MOS和N_MOS管组成的单元电路.输出高电平(3.3V)时,P_MOS导通,低电平(0V)时,N_MOS导通(两个管子轮流导通,一个进电流,一个拉电流.这样它的负载能力和开关速度都比普通方式有大的提高) 
用法: 一般都是应用在输出电平为0和3.3V的场合.

GPIO_Mode_Out_OD(普通开漏输出) 
原理: 
在输出0时,既高电平,则N_MOS管导通,使输出接地.在输出1时,则不输出高电平也不输出低电平(无法输出高电平,本身为高阻态).所以在使用的时候,必须在外部接上一个上拉电阻并且开漏输出模式具有”线与”的特性,既有很多开漏模式的引脚接到一起时,只有在所有引脚都处于高阻态的时候,才会输出高电平.(电压是外部上拉电阻所接电源的电压).只要其中一个引脚是低电平,那么整个线路都等于短路接地(低电平),电压是0V.(只要是开漏输出模式,都必须接上拉电阻) 
用法: 
一般应用在电平不匹配的场合,如需要输出5V的高电平,就需要在外部接上一个上拉电阻,电源为5V.这时在输出高组态的时候,就会由上拉电阻和电源向外输出5V.

GPIO_Mode_AF_PP(复用推挽输出) 
GPIO_Mode_AF_OD(复用开漏输出) 
原理: 同上. 
用法: 对于复用模式,一般都是由GPIO的复用功能来选择的(比如一个IO引脚可以做一般输入输出,同时还是串口输出脚,这就是复用) 例如:GPIO的引脚用作串口的输出,就可以使用复用推挽输出模式了.如果是用在I2C,SMBUS这些需要线与功能的,就使用复用开漏输出

附上工作模式原理图,想具体了解的朋友可以看着原理图对照我上面所说的,一步步看,最右边的为IO引脚


GPIO相关配置寄存器

每组GPIO端口的寄存器包括:

  • 一个端口模式寄存器(GPIOx_MODER)

  • 一个端口输出类型寄存器(GPIOx_OTYPER)

  • 一个端口输出速度寄存器(GPIOx_OSPEEDR)

  • 一个端口上拉下拉寄存器(GPIOx_PUPDR)

  • 一个端口输入数据寄存器(GPIOx_IDR)

  • 一个端口输出数据寄存器(GPIOx_ODR)

  • 一个端口置位/复位寄存器(GPIOx_BSRR)

  • 一个端口配置锁存寄存器(GPIOx_LCKR)

  • 两个复位功能寄存器(低位GPIOx_AFRL & GPIOx_AFRH)

如果配置一个IO口需要2个位,那么刚好32位寄存器配置一组IO口16个IO口
如果配置一个IO口只需要1个位,一般高16位保留
BSRR寄存器32位分为低16位BSRRL和高16位BSRRH,BSRRL配置一组IO口的16个IO口的置位状态(1),BSRRH配置复位状态(0)。


关键字:STM32  GPIO  工作模式  配置寄存器 引用地址:STM32 GPIO的8种工作模式及相关配置寄存器

上一篇:STM32寄存器操作端口模式SDA_OUT()/SDA_IN()
下一篇:STM32输入上拉下拉 寄存器怎么设置实现

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

stm32软件仿真调试
下面是一个单片机STM32RCT6的PA8,PA9,PA10引脚输出PWM波形的仿真步骤,此外还展示了软件运行过程,如何查看全局变量的实时数据。每一步我都做了截图,大家照着一步步来,请大家放心参考! 1.点target图标,如下: 2.选择好单片机芯片的型号:我选的STM32RCT6型号,大家可以根据自己手上stm32开发板的型号来选择 3.外部晶振频率的选择:8Mhz(因为大部分单片机的外部晶振是8Mhz),为了使仿真更贴近实际,通常情况下都是选8Mhz 4.进入Debug页面进行设计,特别要注意第四点parameter,注意选正确好芯片的型号,我的是RC系列,所以写了RC,如果是RB系列,
[单片机]
<font color='red'>stm32</font>软件仿真调试
几种STM32开发IDE的比较与选择
用于STM32开发的IDE有很多,ST公司的网站上足足列出了19个,其中,常用的商业版软件有: MDK-ARM-STM32 IAR-EWARM 这两个商业版软件虽然好用,但终究是商业版软件。免费或评估版的软件要么有器件型号限制,要么有程序容量限制。 免费的STM32开发IDE有很多,基本上都是基于Eclipse+GNU GCC的。 网上有教程介绍如何手工用Eclipse + GNU GCC搭建STM32开发环境的,但是过程比较麻烦,而且因为版本的差异,各个教程的内容有差异,本人做了多次尝试都没有配置成功。 现在STMicroelectronics公司主推HAL+STM32CubeMX的开发方式,STM32Cu
[单片机]
几种<font color='red'>STM32</font>开发IDE的比较与选择
STM32基于固件库学习笔记(4)(通用定时器)TIM3定时1S中断
有 TIME1 和 TIME8 等高级定时器,也有 TIME2~TIME5 等通用定时器,还有 TIME6 和TIME7 等基本定时器。 通用定时器:是一个通过可编程预分频器(PSC)驱动的 16 位自动装载计数器(CNT)构成;可以用来测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和 PWM)等功能。 STM3 的通用 TIMx (TIM2、TIM3、TIM4 和 TIM5)定时器功能包括:  1)16 位向上、向下、向上/向下自动装载计数器(TIMx_CNT)。  2)16 位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为 1~65535 之间的任意数值。  3)4
[单片机]
STM32学习笔记之中断向量表,MDK程序启动分析
span style= font-size:18px; ;// h Stack Configuration ;// o Stack Size (in Bytes) 0x0-0xFFFFFFFF:8 ;// /h Stack_Size EQU 0x00000200 ;//定义堆栈大小 AREA STACK, NOINIT, READWRITE, ALIGN=3 ;//定义一个数据段 按8字节对齐 Stack_Mem SPACE Stack_Size ;//保留Stack_Size大小的堆栈空间 __initial_
[单片机]
<font color='red'>STM32</font>学习笔记之中断向量表,MDK程序启动分析
如何基于标准库构建STM32工程
本文将以STM32F10x为例,对标准库开发进行概览。主要分为三块内容: STM32系统结构 寄存器 通过点灯案例,详解如何基于标准库构建STM32工程 STM32系统结构 上图,STM32f10xxx系统结构。 内核IP 从结构框图上看,Cortex-M3内部有若干个总线接口,以使CM3能同时取址和访内(访问内存),它们是:指令存储区总线(两条)、系统总线、私有外设总线。有两条代码存储区总线负责对代码存储区(即 FLASH 外设)的访问,分别是I-Code 总线和D-Code 总线。 I-Code用于取指,D-Code用于查表等操作,它们按最佳执行速度进行优化。 系统总线(System)用于访问内存和外设,覆盖
[单片机]
如何基于标准库构建<font color='red'>STM32</font>工程
STM32 串口总线空闲检测
主机环境:Windows XP SP3 开发环境:MDK 5.20 目标芯片:STM32F030C8T6 前两天在群里看到有人在询问有关STM32 串口总线空闲检测的事情,根据串口总线是否空闲来判断一帧数据是否发送完成,之前使用串口一直没怎么注意过这一串口特性,所以后来特意去看了下手册中有关总线空闲检测的指示,发现它的确是个好特性,之前都只是在串口中断中接收数据在主循环中不断的读取数据然后检测是否是一帧完整的数据,之后再进行后续处理。这样处理有一个不是很好的问题就是在主循环读取串口数据时需要有个超时计数器来避免无串口数据时死等在那里,但如果使用串口总线空闲检测的话,我们就不需要超时计数器了,只需要在检测到串口总线空闲时把收到的数据
[单片机]
STM32时钟与GPIO分析 基于STM32的LED灯开发
一、 STM32时钟分析 寄存器 :寄存器的功能是存储二进制代码,它是由具有存储功能的触发器组合起来构成的。一个触发器可以存储1位二进制代码,故存放n位二进制代码的寄存器,需用n个触发器来构成 在计算机领域,寄存器是CPU内部的元件,包括通用寄存器、专用寄存器和 控制寄存器 。寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。 控制寄存器 :相当一排可通过0/1进行设置外设功能的开关,程序中通过地址查找到对应的寄存器,所以说控制寄存器的地址是唯一。 芯片时钟:芯片工作时,是需要脉冲,脉冲相当于给芯片起振,可保证芯片的正常工作,类似于人,心脏正常跳动,人体生命特征才能正常。 1HZ:一秒产生1个脉冲 频率换算单位:
[单片机]
<font color='red'>STM32</font>时钟与<font color='red'>GPIO</font>分析 基于<font color='red'>STM32</font>的LED灯开发
stm32的定时器输入捕获与输出比较
明确一点对比AD的构造,stm32有3个AD,每个AD有很多通道,使用哪个通道就配置成哪个通道,这里定时器也如此,有很多定时器TIMx,每个定时器有很多CHx(通道),可以配置为输入捕捉-------测量频率用,也可以配置为输出比较--------输出PWM使用 输入捕捉:可以用来捕获外部事件,并为其赋予时间标记以说明此事件的发生时刻。 外部事件发生的触发信号由单片机中对应的引脚输入(具体可以参考单片机的datasheet),也可以通过模拟比较器单元来实现。 时间标记可用来计算频率,占空比及信号的其他特征,以及为事件创建日志,主要是用来测量外部信号的频率。 输出比较:定时器中计数寄存器在初始化完后会自动的计数。从botto
[单片机]
<font color='red'>stm32</font>的定时器输入捕获与输出比较
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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