首页 > 其他分享 >GPIO原理与寄存器

GPIO原理与寄存器

时间:2023-04-05 18:24:28浏览次数:36  
标签:输出 引脚 寄存器 低电平 GPIOE 原理 GPIO

GPIO的工作方式

输入

浮空输入模式

输出缓冲器被禁止,施密特触发输入被激活,不接上拉和下拉电阻,出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器。

 

上拉输入模式

输出缓冲器被禁止,施密特触发输入被激活,上拉电阻接通,不接下拉电阻,当I/O引脚无输入信号时,读取到的数据为1,即高电平

 

下拉输入模式

输出缓冲器被禁止,施密特触发输入被激活,上拉电阻不接,下拉电阻接通,当I/O引脚无输入信号时,读取到的数据为0,即低电平

 

有些传感器等元气件,他们的信号输出有效时候会输出一个高电平(或者低电平),无效时候不输出,为开路。此时我们就必须用上拉电阻(或下拉电阻)。

 

模拟输入模式

输出缓冲器被禁止,禁止施密特触发输入,实现了每个模拟I/O引脚上的零消耗。施密特触发输出值被强置为’0’;上拉和下拉电阻被禁止; I/O引脚的信号交由片上外设(比如ADC)处理。

 

 

输出

推挽输出模式

输出缓冲器被激活,施密特触发输入被激活,上拉电阻和下拉电阻被禁止,若通过输出数据寄存器输出1,则P-mos管导通,N-MOS管截止,I/O脚得到高电平;输出0,则相反

输出低电平时0v,输出高电平时3.3v;对输出数据寄存器的读访问得到最后一次写的值

 

 

复用推挽输出

 

开漏输出模式

输出缓冲器被激活,施密特触发输入被激活,上拉电阻和下拉电阻被禁止,输出寄存器上的’0’激活N-MOS,端口得到低电平;而输出寄存器上的’1’将端口置于高阻状态(P-MOS从不被激活)。

 

复用开漏输出

 

输出对比

  • 推挽输出:
    可以输出高低电平,连接数字器件,两个MOS管轮流导通,使其负载能力
    和开关速度都比普通方式有很大提高
  • 开漏输出:
    只可以输出低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电
    极。要得到高电平状态需要上拉电阻才行,适合于做电流型的驱动,其吸收
    电流的能力相对强(一般20ma以内)。
  • 非复用输出方式其输出值由cpu执行指令控制,复用
    输出方式其输出值来自片上外设

 

输出引脚的速度

  • “速度”指输出驱动电路的响应速度,并不是输出信号的速度。芯片内部在
    I/O口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据
    自己的需要选择合适的驱动电路,通过选择速度来选择不同的输出驱动模
    块,达到最佳的噪声控制和降低功耗的目的。
  • GPIO的引脚速度应与应用相匹配,如果输出信号的频率超过了驱动电路的
    响应速度,就有可能信号失真。(比如:信号频率为10MHz,而你配置了
    2MHz的带宽,则10MHz的方波很可能就变成了正弦波),另一方面,速度
    配置越高,噪声越大,功耗越大。
  • 常用的选择:
    ① USART串口,若最大波特率只需115.2k,那用2M的速度就够了,既省
    电也噪声小。
    ② I2C接口,若使用400k波特率,若想把余量留大些,可以选用10M的
    GPIO引脚速度。
    ③ SPI接口,若使用18M或9M波特率,需要选用50M
  • 当GPIO的I/O引脚配置为输入模式时,不需要配置输出速度。

 

 

GPIO寄存器

实现对GPIO端口初始化配置和数据输入输出控制

 

1. 配置寄存器:GPIOx_CRL、GPIOx_CRH
用来选择引脚功能,例如输入或输出


2. 数据寄存器:GPIOx_IDR、GPIOx_ODR
用来保存引脚输入电平或输出电平


4. 位控寄存器:GPIOx_BSRR、GPIOx_BRR
用来控制某引脚为1或0


4. 锁定寄存器:GPIOx_LCKR
用来锁定引脚配置(不允许修改)

 

每个寄存器只能以32位(字)进行访问

不允许16位(半字)或8位(字节)访问

 

每组端口有两个32位配置寄存器


• 配置寄存器低(Low) 字GPIOx_CRL
• 配置寄存器高(High)字GPIOx_CRH
(x是A~G)

配置寄存器低字CRL对应配置  低8位引脚Px0、Px1、……Px7

配置寄存器高字CRH对应配置  高8位引脚Px8、Px9、……Px15

 

两个32位(一个64位)配置寄存器


每4位对应一个引脚(64位对应16个引脚)
• 低2位设置其工作模式(MODE)
• 高2位设置其配置(CNF:Configuration)


共有4种输入功能、4种输出功能

 

 

GPIO的引脚配置功能表

 

GPIO的数据寄存器

 

举例

使GPIOE的第5管脚输出低电平,使GPIOE端口的第11管脚输出高电平
如果使用端口输出数据寄存器GPIOE_ODR,按照“读出—修改—写回”策略,其语句为:


GPIOE_ODR &=~(1uL<<5);
GPIOE_ODR |= (1uL<<11);

 

位输出问题

对输出数据寄存器某位写入时
• 要考虑其他位的状态,不能任意改变


需要首先读出输出数据寄存器的内容
• 修改相应位再写入(读出-修改-写回)


GPIO的输出数据寄存器ODR可以读出
• 用以支持位输出控制

 

GPIO的位控制器

每个端口有两个位控寄存器
• 只能写入、不能读出
• 某位写入1实现I/O引脚复位或置位
• 写入0对I/O引脚无影响(作用)

一个是位置位/复位寄存器BSRR
• 高16位控制引脚为低电平(复位BR:Bit Reset)
• 低16位控制引脚为高电平(置位BS:Bit Set)


一个是位复位寄存器BRR
• 低16位控制引脚为低电平(复位BR:Bit Reset)

 

 

举例

使GPIOE的第5管脚输出高电平:
GPIOE_BSRR=(1uL<<5);

使GPIOE端口的第11管脚输出低电平:
GPIOE_BSRR = (1uL<<11)<<16;

 

 

GPIO的锁定寄存器

 

端口配置锁定寄存器GPIOx_LCKR(32位)
• 用于冻结配置寄存器对I/O引脚功能的设定


当对端口执行了写入锁定序列后
• 被锁定引脚配置的工作模式不能再改变
• 直到下次复位后才被解锁


锁定功能可以防止程序随意改变GPIO配置

举例

要锁定GPIOE端口的第5脚和第11脚的配置,
则使用以下语句:
GPIOE_LCKR = (1uL<<16) | (1uL<<11) | (1uL<<5); 
GPIOE_LCKR = (1uL<<11) | (1uL<<5); 
GPIOE_LCKR = (1uL<<16) | (1uL<<11) | (1uL<<5); 
GPIOE_LCKR = (1uL<<11) | (1uL<<5); 
v1 = GPIOE_LCKR;

/*这里v1为无符号32位整型*/

 

标签:输出,引脚,寄存器,低电平,GPIOE,原理,GPIO
From: https://www.cnblogs.com/wxk1213/p/17290192.html

相关文章

  • 经控制平面传递寄存器信息实验
    经控制平面传递寄存器信息实验实验目的为了在tofino上实现微突发缓解所需的微突发检测,需要在ingress阶段获取出端口的队列信息。但由于硬件限制,ingress阶段不能直接访问在egress阶段获取的队列长度信息,因此需要一种方法,将每个端口的队列长度是否超过阈值的信息,传递给ingresspip......
  • (第六篇)__iter__、__next__及for循环执行原理(可迭代对象、迭代器、生成器)
    摘要:只要有__iter__,那么这个对象就是可迭代对象,若对象有__iter__和__next__两种方法,则这个对象为迭代器对象。一、概念什么是迭代?迭代就是重复,但是每一次重复都与上一次有关联,这就是迭代。"""这不是迭代,这是简单的重复"""whileTrue:print(1)"""这是迭代。每一......
  • 10静态路由原理及配置
    1.路由:从源主机到目标主机的转发过程(路由器就是能够将数据包转发到正确的目的地,并在转发的过程中选择最佳路径的设备就是路由器)2.根据路由表转发数据1网段要给4网段发送消息:主机1的数据首先到路由器A这里,路由器A这里首先会查询路由器表,查看自己的路由表中数据发送到4网段数......
  • epoll底层原理
    1.进程socket描述2.accept简单流程SYSCALL_DEFINE4(accept4,int,fd,structsockaddr__user*,upeer_sockaddr, int__user*,upeer_addrlen,int,flags){ structsocket*sock,*newsock; structfile*newfile; interr,len,newfd,fput_needed; structsockaddr_......
  • new操作符的原理
    首先这里是一个构造函数:functionFun(age,name){this.age=agethis.name=name}这个是创建的函数:functioncreate(fn,...args){1.创建了一个空对象varobj={}2.将空对象的原型指向构造函数的对象Object.setPrototypeOf(obj,fn.prototype)3.将空对象作为构造函数的上下......
  • EasyUI闪屏,EasyUI页面加载提示:原理+代码+效果图
    使用EasyUI时,有个经常遇到的问题,页面还没有渲染完成的时候,就展现了。刚刚开始很混乱,等加载完成后,就好了。    $.parser.onComplete,这个是在所有组件解析完成后执行的事件。其实这个事件很有用的。很多在布局用到easyui的时候总会出现一个问题。就是在一进入主界面的时候,页......
  • 基础原理 | 善用数据手册
    【1】STM32F103ZET6定义  STM32=基于ARM核心的32位微控制器F =通用类型103=增强型Z=引脚数目为144脚(引脚越多外设越多)E=512K字节的闪存存储器T=封装为LQFP(LQFP144)6=工业级温度范围-40~85【2】引脚定义  引脚号和名称和芯片的引脚一一对应类型:S电源,I......
  • 一文带你弄懂 Maven 拉包原理
    业务需求开发的时候,我们总是会遇到拉不到依赖包的情况。此时如果不清楚Maven拉取依赖包的原理,那么很可能找不到问题所在。今天树哥就带大家了解下Maven拉包的原理,让你在遇到问题的时候能快速解决!三种仓库在Maven中,仓库指的是存放代码构建的一个位置。从分类上来说,Maven仓......
  • go run、build、install、get的原理和区别
    学习go也有好些年头了,都没怎么研究过go的编译命令。真是惭愧。今天学习并记录下结论:gorun专门用来运行命令源码文件的命令,一般用来运行单个文件gobuild主要是用于测试编译。编译某个包或者项目,在当前目录下生成可执行文件goinstall编译并安装代码包或者源码文件的。go......
  • 数据库系统原理之数据库应用设计与开发实例
    数据库应用设计与开发实例第一节需求描述与分析在此,结合某高校个性化课程在线选课的实际需求,给出一个简化的需求分析一、功能性需求1管理员后台模块学生信息管理教师信息管理课程信息管理班级信息管理2学生使用模块查询课程浏览所选课程查询成绩3教师使用模......