GPIO设计-文档资料_第1页
GPIO设计-文档资料_第2页
GPIO设计-文档资料_第3页
GPIO设计-文档资料_第4页
GPIO设计-文档资料_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1GPIO GPIO 设计设计2配置模式CNF1CNF0MODE1MODE0PxODR寄存器通用输出推挽(Push-Pull)00 0 或 1开漏(Open-Drain)10 或 1复用功能 输出推挽(Push-Pull)10不使用开漏(Open-Drain)1不使用输入模拟输入0000不使用浮空输入1不使用下拉输入100上拉输入13输出模式位MODE1:0意义00保留01最大输出速度为10MHz10最大输出速度为2MHz11最大输出速度为50MHz4端口配置低寄存器(GPIOx_CRL) (x=A.E)(GPIOx_CRL) (x=A.E) 偏移地址:0 x00 复位值:0 x4444 44

2、445位 31:30 27:26 23:22 19:18 15:14 11:10 7:6 3:2CNFy1:0:端口x配置位(y = 815) (Port x config-uration bits)软件通过这些位配置相应的I/O端口。在输入模式(MODE1:0=00):00:模拟输入模式01:浮空输入模式(复位后的状态)10:上拉/下拉输入模式11:保留 在输出模式(MODE1:000):00:通用推挽输出模式01:通用开漏输出模式10:复用功能推挽输出模式11:复用功能开漏输出模式6位29:28 25:24 21:20 17:16 13:12 9:8 5:4 1:0MODEy1:0:端口x

3、的模式位(y = 07) (Port x mode bits)软件通过这些位配置相应的I/O端口。00:输入模式(复位后的状态)01:输出模式,最大速度10MHz10:输出模式,最大速度2MHz11:输出模式,最大速度50MHz7 偏移地址:0 x04 复位值:0 x4444 4444端口配置高寄存器(GPIOx_CRH) (GPIOx_CRH) 8 CNFy1:0CNFy1:0:端口x配置位(y = 815) 软件通过这些位配置相应的I/O端口。 在输入模式(MODE1:0=00): 00:模拟输入模式 01:浮空输入模式(复位后的状态) 10:上拉/下拉输入模式 11:保留 在输出模式(M

4、ODE1:000): 00:通用推挽输出模式 01:通用开漏输出模式 10:复用功能推挽输出模式 11:复用功能开漏输出模式 位 31:30 27:26 23:22 19:18 15:14 11:10 7:6 3:29 MODEy1:0MODEy1:0:端口x的模式位(y = 815) 软件通过这些位配置相应的I/O端口。 00:输入模式(复位后的状态) 01:输出模式,最大速度10MHz 10:输出模式,最大速度2MHz 11:输出模式,最大速度50MHz 位29:28 25:24 21:20 17:16 13:12 9:8 5:4 1:010 地址偏移:0 x08 复位值:0 x0000

5、XXXX端口输入数据寄存器(GPIOx_IDR)(GPIOx_IDR)11 位31:16保留,始终读为0。 位15:0 IDRy15:0IDRy15:0:端口输入数据(y = 015) (Port input data)这些位为只读并只能以字(16位)的形式读出。读出的值为对应I/O口的状态。12 地址偏移:0Ch 复位值:0 x0000 0000端口输出数据寄存器(GPIOx_ODR)(GPIOx_ODR)13 位31:16保留,始终读为0。 位15:0ODRy15:0ODRy15:0:端口输出数据(y = 015) 这些位可读可写并只能以字(16位)的形式操作。注:对GPIOx_BSRR(

6、x = AE),可以分别地对各个ODR位进行独立的设置/清除。14端口位设置/ /清除寄存器(GPIOx_BSRR)(GPIOx_BSRR) 地址偏移:0 x10 复位值:0 x0000 000015位31:16 BRyBRy: 清除端口x的位y (y = 015) (Port x Reset bit y)这些位只能写入并只能以字(16位)的形式操作。0:对对应的ODRy位不产生影响1:清除对应的ODRy位为0注:如果同时设置了BSy和BRy的对应位,BSy位起作用。16 位15:0 BSyBSy: 设置端口x的位y (y = 015) (Port x Set bit y)这些位只能写入并只能

7、以字(16位)的形式操作。0:对对应的ODRy位不产生影响1:设置对应的ODRy位为117端口位清除寄存器(GPIOx_BRR) (GPIOx_BRR) 地址偏移:0 x14 复位值:0 x0000 000018 位31:16保留。 位15:0 BRyBRy: 清除端口x的位y (y = 015) (Port x Reset bit y)这些位只能写入并只能以字(16位)的形式操作。0:对对应的ODRy位不产生影响1:清除对应的ODRy位为019端口配置锁定寄存器(GPIOx_LCKR)(GPIOx_LCKR)当执行正确的写序列设置了位16(LCKK)时,该寄存器用来锁定端口位的配置。位15:

8、0用于锁定GPIO端口的配置。在规定的写入操作期间,不能改变LCKP15:0。当对相应的端口位执行了 LOCK序列后,在下次系统复位之前将不能再更改端口位的配置。 每个锁定位锁定控制寄存器(CRL, CRH)中相应的4个位。 地址偏移:0 x18 复位值:0 x0000 000020 位31:17保留。 位16 LCKK:锁键 (Lock key)该位可随时读出,它只可通过锁键写入序列修改。0:端口配置锁键位激活1:端口配置锁键位被激活,下次系统复位前GPIOx_LCKR寄存器被锁住。 锁键的写入序列:写1 - 写0 - 写1 - 读0 - 读1 最后一个读可省略,但可以用来确认锁键已被激活。

9、 注:在操作锁键的写入序列时,不能改变LCK15:0的值。 操作锁键写入序列中的任何错误将不能激活锁键。2122位15:0 LCKy: 端口x的锁位y (y = 015) 这些位可读可写但只能在LCKK位为0时写入。 0:不锁定端口的配置 1:锁定端口的配置2324 (1) VDD_FT 对5伏容忍I/O脚是特殊的,它与VDD不同25 一、一、GPIOGPIO的各种模式的各种模式 GPIOGPIO管脚可以被配置为多种工作模式,其中有管脚可以被配置为多种工作模式,其中有3 3种比较常用:高阻输入、推挽输出、开漏输出种比较常用:高阻输入、推挽输出、开漏输出1 1 高阻输入高阻输入(Input)(I

10、nput) 输入模式的结构比较简单,就是一个带有施密特输入模式的结构比较简单,就是一个带有施密特触发输入的三态缓冲器(触发输入的三态缓冲器(U1U1),并具有很高的输),并具有很高的输入等效阻抗。入等效阻抗。 GPIO高阻输入模式结构示意图 26 施密特触发输入的作用是能将缓慢变化的或者是畸变的输入脉冲信号整形成比较理想的矩形脉冲信号。 执行GPIO管脚读操作时,在读脉冲(Read Pulse)的作用下会把管脚(Pin)的当前电平状态读到内部总线上(Internal Bus)。在不执行读操作时,外部管脚与内部总线之间是隔离的。27 2 2 推挽输出推挽输出(Output)(Output)28

11、U1是输出锁存器,执行GPIO管脚写操作时,在写脉冲(Write Pulse)的作用下,数据被锁存到Q和/Q。 T1和T2构成CMOS反相器,T1导通或T2导通时都表现出较低的阻抗,但T1和T2不会同时导通或同时关闭,最后形成的是推挽输出。 在推挽输出模式下,GPIO还具有回读功能,实现回读功能的是一个简单的三态门U2。 注意:执行回读功能时,读到的是管脚的输出锁存状态,而不是外部管脚Pin的状态。29 3 3 开漏输出开漏输出(OutputOD)(OutputOD) 开漏输出和推挽输出相比结构基本相同,但只有开漏输出和推挽输出相比结构基本相同,但只有下拉晶体管下拉晶体管T1T1而没有上拉晶体

12、而没有上拉晶体管。同样,管。同样,T1T1实际实际上也是多组可编程选择的晶体管。上也是多组可编程选择的晶体管。 30 开漏输出结构没有内部上拉,因此在实际应用时通常都要外接合适的上拉电阻(通常采用4.710k)。开漏输出能够方便地实现“线与”逻辑功能,即多个开漏的管脚可以直接并在一起 。 开漏输出的另一种用途是能够方便地实现不同逻辑电平之间的转换(如3.3V到5V之间),只需外接一个上拉电阻,而不需要额外的转换电路。典型的应用例子就是基于开漏电气连接的I2C总线。31 4 4 钳位二极管钳位二极管 其作用是防止从外部管其作用是防止从外部管 脚脚PinPin输入的电压过高输入的电压过高 或者过低

13、。或者过低。 32 二、二、GPIOGPIO配置配置 (1 1)GPIO_Mode_AIN GPIO_Mode_AIN 模拟输入模拟输入 (2 2)GPIO_Mode_IN_FLOATING GPIO_Mode_IN_FLOATING 浮空输入浮空输入 (3 3)GPIO_Mode_IPD GPIO_Mode_IPD 下拉输入下拉输入 (4 4)GPIO_Mode_IPU GPIO_Mode_IPU 上拉输入上拉输入 (5)GPIO_Mode_Out_OD 开漏输出 (6)GPIO_Mode_Out_PP 推挽输出 (7)GPIO_Mode_AF_OD 复用开漏输出 (8)GPIO_Mode_

14、AF_PP 复用推挽输出33 1. I/O口速度 GPIO_Speed_10MHz 最高输出速率10MHz GPIO_Speed_2MHz 最高输出速率2MHz GPIO_Speed_50MHz 最高输出速率50MHz I/O口的输出模式下,有3种输出速度可选(2MHz、10MHz和50MHz),这个速度是指I/O口驱动电路的响应速度而不是输出信号的速度,输出信号的速度与程序有关 。34 通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。 高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI性能。 当然如果要输出较高频率的

15、信号,但却选用了较低频率的驱动模块,很可能会得到失真的输出信号。35 关键是GPIO的引脚速度跟应用匹配 对于串口,假如最大波特率只需115.2k,那么用2M的GPIO的引脚速度就够了,既省电也噪声小。 对于I2C接口,假如使用400k波特率,若想把余量留大些,那么用2M的GPIO的引脚速度或许不够,这时可以选用10M的GPIO引脚速度。 对于SPI接口,假如使用18M或9M波特率,用10M的GPIO的引脚速度显然不够了,需要选用50M的GPIO的引脚速度。 36 2. GPIO口设为输入时,输出驱动电路与端口是断开,所以输出速度配置无意义。 3. 在复位期间和刚复位后,复用功能未开启,I/O

16、端口被配置成浮空输入模式。 所有端口都有外部中断能力。为了使用外部中断线,端口必须配置成输入模式。 37 4.推挽输出与开漏输出的区别推挽输出与开漏输出的区别 推挽输出推挽输出: :可以输出高可以输出高, ,低电平低电平, ,连接数字器件连接数字器件; ;开开漏输出漏输出: :输出端相当于三极管的集电极输出端相当于三极管的集电极. . 要得到要得到高电平状态需要上拉电阻才行高电平状态需要上拉电阻才行. . 适合于做电流型适合于做电流型的驱动的驱动, ,其吸收电流的能力相对强其吸收电流的能力相对强( (一般一般20mA20mA以以内内).). 38 三、在三、在STM32STM32中选用中选用I

17、OIO模式模式 (1 1) 浮空输入浮空输入_IN_FLOATING _IN_FLOATING 浮空输入,可以做浮空输入,可以做KEYKEY识识别,别,RX1RX1 (2 2)带上拉输入)带上拉输入_IPUIO_IPUIO内部上拉电阻输入内部上拉电阻输入 (3 3)带下拉输入)带下拉输入_IPDIO_IPDIO内部下拉电阻输入内部下拉电阻输入 (4 4) 模拟输入模拟输入_AIN _AIN 应用应用ADCADC模拟输入,或者低功耗下模拟输入,或者低功耗下省电。省电。 (5 5)开漏输出)开漏输出_OUT_OD IO_OUT_OD IO输出输出0 0接接GNDGND,IOIO输出输出1 1,悬空

18、,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为需要外接上拉电阻,才能实现输出高电平。当输出为1 1时,时,IOIO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样这样IOIO口也就可以由外部电路改变为低电平或不变口也就可以由外部电路改变为低电平或不变 。可。可以读以读IOIO输入电平变化,实现输入电平变化,实现C51C51的的IOIO双向功能。双向功能。39 (6)推挽输出)推挽输出_OUT_PP IO输出输出0-接接GND, IO输出输出1 -接接VCC,读输入值是未,读输入值是未知的。知的。 (7)复用功能的推挽输出)复用功能

19、的推挽输出_AF_PP 片片内外设功能(内外设功能(I2C的的SCL,SDA) (8)复用功能的开漏输出)复用功能的开漏输出_AF_OD片片内外设功能(内外设功能(TX1,MOSI,MISO,SCK,SS)40 实例实例 (1)模拟)模拟I2C使用开漏输出使用开漏输出_OUT_OD,接上拉电阻,能够,接上拉电阻,能够正确输出正确输出0和和1;读值时先;读值时先 GPIO_SetBits(GPIOB, GPIO_Pin_0);拉高,然后可以读;拉高,然后可以读IO的值;使用的值;使用GPIO_ReadInputData Bit(GPIOB, GPIO_Pin_0); (2)如果是无上拉电阻,)如

20、果是无上拉电阻,IO默认是高电平;需要读取默认是高电平;需要读取IO的的值,可以使用值,可以使用 (3)带上拉输入)带上拉输入_IPU和浮空输入和浮空输入_IN_FLOATING和和 开漏开漏输出输出_OUT_OD;41操作寄存器方法代码 #include 02#include system.h 03 04 05/LED端口定义0607#define LED0 PAout(4)/ PA408 09voidvoid Gpio_Init(voidvoid); 4210 11intint main(voidvoid)12 13 Rcc_Init(9); /系统时钟设置14 Gpio_Init();

21、/初始化与LED连接的硬件接口15 whilewhile(1)16 17 LED0=0;18 delay(300000); /延时300ms4319 LED0=1;20 delay(300000);21 22 23 24 25 voidvoid Gpio_Init(voidvoid)264427 RCC-APB2ENR|=1CRL&=0XFFF0FFFF;30 GPIOA-CRL|=0X00030000;/PA4 推挽输出 31 GPIOA-ODR|=1APB2ENR|=1APB2ENR|=1CRH&=0XFFFFFFF0; GPIOA-CRH|=0X00000003;/PA8

22、 推 GPIOA-ODR|=1CRL&=0XFFFFF0FF;GPIOD-CRL|=0X00000300;/PD.2推挽输出GPIOD-ODR|=12; /PD.2输出高 63/led.h#ifndef _LED_H#define _LED_H #include sys.h/LED驱动代码 /LED端口定义#define LED0 PAout(8)/ PA8#define LED1 PDout(2)/ PD2void LED_Init(void);/初始化 #endif64#include #include sys.h#include usart.h#include delay.h#i

23、nclude led.h /跑马灯实验 int main(void) Stm32_Clock_Init(9); /系统时钟设置65delay_init(72); /延时初始化LED_Init(); /初始化与LED连接的硬件接口while(1) LED0=0;LED1=1;delay_ms(300);LED0=1;LED1=0;delay_ms(300); 66例子(固件库操作)/led.c#include led.hvoid LED_GPIO_Config(void)GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE); 67GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure);GPIO_SetBits(GPIOC, GPIO_Pin_3 | GPIO_Pin_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论