您的位置 首页 5G

GPIO内部结构、作业原理及相关寄存器详解(以STM32为例)

1.STM32实物图:2.STM32引脚分布图:STM32F103ZET6:共144个引脚,7组IO口,每组16个IO口7*16=112个IO口(这7组IO口分别为GP

  1. STM32实物图:

    

 

  2. STM32引脚分布图:

    

 

  STM32F103ZET6:共144个引脚,7组IO口,每组16个IO口

  7*16=112个IO口(这7组IO口分别为GPIOA,GPIOB…GPIOG)

  例如:PGIOA包括PA0,PA1,PA2…PA15,每组16个IO口

  二,IO口的根本结构和作业方式

  1. STM32F1系列IO口的根本结构()IO口内部电路结构)

    

 

  右侧I/O引脚部分为芯片暴露在外部的引脚

  每个引脚在数据手册都有阐明是否支撑(辨认))5V电压

  三,PGIO的8种作业方式

  4种输入方式

  输入浮空

  输入上拉

  输入下拉

  模仿输入

  4种输出方式

  开漏输出

  开漏复用功用

  推挽输出

  推挽复用功用

  可装备3种最大翻转速度

  2MHz

  10MHz

  50MHz

  四,八种作业方式解说

  1,GPIO输入作业方式1-输入浮空方式

    

 

  1)外部经过IO口输入电平,外部电平经过上下拉部分(浮空方式下都封闭,既无上拉也无下拉电阻)

  2)传输到施密特触发器(此刻施密特触发器为翻开状况)

  3)持续传输到输入数据寄存器IDR

  4)CPU经过读输入数据寄存器IDR完成读取外部输入电平值

  在输入浮空方式下能够读取外部输入电平

  2,GPIO输入作业方式2-输入上拉方式

    

 

  和输入浮空方式相比较,不同之处在于内部有一个上拉电阻衔接到VDD(输入上拉方式下,上拉电阻开关接通,阻值约30-50K)

  外部输入经过上拉电阻,施密特触发器存入输入数据寄存器IDR,被CPU读取

  3,GPIO输入作业方式3-输入下拉方式

    

 

  和输入浮空方式相比较,不同之处在于内部有一个下拉电阻衔接到VSS(输入下拉方式下,下拉电阻开关接通,阻值约30-50K)

  外部输入经过下拉电阻,施密特触发器存入输入数据寄存器IDR,被CPU读取

  4,GPIO输入作业方式4-输入模仿方式

    

 

  上拉和下拉部分均为封闭状况(AD转化-模仿量转化为数字量)

  施密特触发器为截止状况

  经过模仿输入通道输入到CPU

  IO口外部电压为模仿量(电压方式非电平方式),作为模仿输入规模一般为0~3.3V

  5,GPIO输出作业方式1-开漏输出方式

    

 

  1,CPU写入位设置/清楚寄存器BSRR,映射到输出数据寄存器ODR

  2,联通到输出操控电路(也便是ODR的电平)

  3,ODR电平经过输出操控电路进入N-MOS管

  -ODR输出1:

  N-MOS截止,IO端口电平不会由ODR输出决议,而由外部上拉/下拉决议

  在输出状况下,输出的电平能够被读取,数据存入输入数据寄存器,由CPU读取,完成CPU读取输出电平

  所以,当N-MOS截止时,假如读取到输出电平为1,纷歧定是咱们输出的1,有可能是外部上拉发生的1

  -ODR输出0:

  N-MOS敞开,IO端口电平被N-MOS管拉倒VSS,使IO输出低电平

  此刻输出的低电平相同能够被CPU读取到

  6,GPIO输出作业方式2-开漏复用输出方式

    

 

  与开漏输出方式仅有的差异在于输出操控电路之前电平的来历

  开漏输出方式的输出电平是由CPU写入输出数据寄存器操控的

  开漏推挽输出方式的输出电平是由复用功用外设输出决议的

  其他与开漏输出方式类似:

  操控电路输出为1:N-MOS截止,IO口电平由外部上拉/下拉决议

  操控电路输出为0:N-MOS敞开,IO口输出低电平

  7,GPIO输出作业方式3-推挽输出方式

    

 

  与开漏输出相比较:

  输出操控寄存器部分相同

  输出驱动器部分加入了P-MOS管部分

  当输出操控电路输出1时:

  P-MOS管导通N-MOS管截止,被上拉到高电平,IO口输出为高电平1

  当输出操控电路输出0时:

  P-MOS管截止N-MOS管导通,被下拉到低电平,IO口输出为低电平0

  一起IO口输出的电平能够经过输入电路读取

  8,GPIO输出作业方式4-复用推挽输出方式

    

 

  与推挽输出方式仅有的差异在于输出操控电路之前电平的来历

  开漏输出方式的输出电平是由CPU写入输出数据寄存器操控的

  开漏推挽输出方式的输出电平是由复用功用外设输出决议的

  9,推挽输出和开漏输出的差异:

  推挽输出:

  能够输出强高/强低电平,能够衔接数字器材

  开漏输出:

  只能输出强低电平(高电平需求依托外部上拉电子拉高),适合做电流型驱动,吸收电流才能较强(20ma之内)

  五,STM32-IO口相关寄存器

  每组GPIO包括系列7个寄存器(7组GPIO共包括7*7=49个寄存器)

  两个32位装备寄存器

  GPIOx_CRL 低16位

  GPIOx_CRH 高16位

  两个32位数据寄存器

  GPIOx_IDR 输入数据寄存器

  GPIOx_ODR 输出数据寄存器

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

  GPIOx_BSRR

  一个16位复位寄存器

  GPIOx_BRR

  一个32位确定寄存器

  GPIOx_LCKR

  六,STM32-IO口相关寄存器解说

  1,端口装备寄存器:

  STM32每组GPIO位16个IO口,每4位操控一个IO口,所以32位操控8个IO口

  分为低16位:GPIOx_CRL和高16位:GPIOx_CRH共32位操控一组GPIO的16个IO口

    

 

  如图:以端口装备寄存器低16位为例,每四位操控一个IO口(高16位同理)

  MODEx的2位 : 装备IO口输出/输出方式(1种输出+3种不同速度的输出方式)

  CNFx的2位 : 装备IO口输入/输出状况下(由MODEx操控)的输入/输出方式

  以GPIOA_CRL为例,装备IO口PA0 -> MODE0=00(输入方式) CNF0=10(上拉/下拉输入方式)

  此种装备下到底是上拉仍是下拉输入方式还需由ODR寄存器决议

    

 

  关于上拉/下拉的操控咱们将在下面-数据寄存器-中介绍ODR输出寄存器时具体阐明

  2,数据寄存器(以输入数据寄存器GPIOx_IDR为例)

  每一组IO口都具有一个GPIOx_IDR的32位寄存器(实践只运用低16位,高16位保存),即16位操控16个IO口,每一位操控一个

    

 

  如图:IDR寄存器共32位,0~15位代表一组IO口16个IO当时值

  这儿咱们现已了解了输入/输出数据寄存器,现在说下上面说到的问题:

  当IO口装备为输入方式且装备为上拉/下拉输入方式(即MODEx=00 CNFx=10时),ODR决议到底是上拉仍是下拉

  1)当输出方式时,ODR为输出数据寄存器

  2)当输入方式时,ODR用作区别当时位输入方式到底是上拉输入(ODRx=0)仍是下拉输入(ODRx=1)

  3,端口位设置/铲除寄存器(GPIOx_BSRR)

    

 

  BSRR寄存器效果:

  BSRR寄存器为32位寄存器,低16位BSx为设置为(1设置0不变),高16位BRx为重置位(1:铲除0:不变)

  当然,终究的意图仍是经过BSRR直接设置ODR寄存器,改动IO口电平

  4,端口位铲除寄存器(GPIOx_BRR)

    

 

  GPIOx_BRR寄存器效果同GPIOx_BSRR寄存器高16位

  一般咱们运用BSRR低16位和BRR的低16位(STM32F4系列取消了BSRR的高16位)

  5,锁存寄存器:运用较少暂不剖析

  七,端口的复用和重映射

  1,端口的复用:

  大部分IO口可复用为外部功用引脚,参阅芯片数据手册(IO口复用和重映射)

    

 

  例如:STM32F103ZET6的PA9和PA10引脚可复用为串口发送和接纳功用引脚,也可复用为定时器1的通道2和通道3

  端口复用的效果:最大极限的使用端口资源

  2,端口的重映射:

    

 

  串口1默许引脚是PA9,PA10能够经过装备重映射映射到PB6,PB7

  端口重映射的效果:便利布线

  3,STM32所有的IO口都可作为中止输入(51单片机只要2个端口能够作为外部中止输入)

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/5g/159882.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部