GPIO设计

上传人:小**** 文档编号:243023349 上传时间:2024-09-14 格式:PPT 页数:72 大小:928.50KB
返回 下载 相关 举报
GPIO设计_第1页
第1页 / 共72页
GPIO设计_第2页
第2页 / 共72页
GPIO设计_第3页
第3页 / 共72页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,GPIO,设计,配置模式,CNF1,CNF0,MODE1,MODE0,PxODR,寄存器,通用输出,推挽,(Push-Pull),0,0,0,或,1,开漏,(Open-Drain),1,0,或,1,复用功能 输出,推挽,(Push-Pull),1,0,不使用,开漏,(Open-Drain),1,不使用,输入,模拟输入,0,0,00,不使用,浮空输入,1,不使用,下拉输入,1,0,0,上拉输入,1,输出模式位,MODE1:0,意义,00,保留,01,最大输出速度为,10MHz,10,最大输出速度为,2MHz,11,最大输出速度为,50MHz,端口配置低寄存器,(,GPIOx_CRL,) (x=A.E),偏移地址:,0x00,复位值:,0x4444 4444,位,31:30 27:26 23:22 19:18 15:14 11:10 7:6 3:2,CNFy1:0,:端口,x,配置位,(y = 815) (Port x,config-uration,bits),软件通过这些位配置相应的,I/O,端口。在输入模式,(,MODE1:0=00,),:,00,:模拟输入模式,01,:浮空输入模式,(,复位后的状态,),10,:上拉,/,下拉输入模式,11,:保留,在输出模式,(MODE1:000),:,00,:通用推挽输出模式,01,:通用开漏输出模式,10,:复用功能推挽输出模式,11,:复用功能开漏输出模式,位,29:28 25:24 21:20 17:16 13:12 9:8 5:4 1:0,MODEy1:0,:,端口,x,的模式位,(y = 07) (Port x mode bits),软件通过这些位配置相应的,I/O,端口。,00,:输入模式,(,复位后的状态,),01,:输出模式,最大速度,10MHz,10,:输出模式,最大速度,2MHz,11,:输出模式,最大速度,50MHz,偏移地址:,0x04,复位值:,0x4444 4444,端口配置高寄存器,(,GPIOx_CRH,),CNFy1:0,:端口,x,配置位,(y = 8,15),软件通过这些位配置相应的,I/O,端口。,在输入模式,(MODE1:0=00),:,00,:模拟输入模式,01,:浮空输入模式,(,复位后的状态,),10,:上拉,/,下拉输入模式,11,:保留,在输出模式,(MODE1:000),:,00,:通用推挽输出模式,01,:通用开漏输出模式,10,:复用功能推挽输出模式,11,:复用功能开漏输出模式,位,31:30 27:26 23:22 19:18 15:14 11:10 7:6 3:2,MODEy1:0,:端口,x,的模式位,(y = 8,15),软件通过这些位配置相应的,I/O,端口。,00,:输入模式,(,复位后的状态,),01,:输出模式,最大速度,10MHz,10,:输出模式,最大速度,2MHz,11,:输出模式,最大速度,50MHz,位,29:28 25:24 21:20 17:16 13:12 9:8 5:4 1:0,地址偏移:,0x08,复位值:,0x0000 XXXX,端口输入数据寄存器,(,GPIOx_IDR,),位,31:16,保留,始终读为,0,。,位,15:0,IDRy15:0,:端口输入数据,(y = 0,15) (Port input data),这些位为只读并只能以字,(16,位,),的形式读出。读出的值为对应,I/O,口的状态。,地址偏移:,0Ch,复位值:,0x0000 0000,端口输出数据寄存器,(,GPIOx_ODR,),位,31:16,保留,始终读为,0,。,位,15:0,ODRy15:0,:端口输出数据,(y = 0,15),这些位可读可写并只能以字,(16,位,),的形式操作。注:对,GPIOx_BSRR(x,= A,E),,可以分别地对各个,ODR,位进行独立的设置,/,清除。,端口位设置,/,清除寄存器,(,GPIOx_BSRR,),地址偏移:,0x10,复位值:,0x0000 0000,位,31:16,BRy,:,清除端口,x,的位,y (y = 0,15) (Port x Reset bit y),这些位只能写入并只能以字,(16,位,),的形式操作。,0,:对对应的,ODRy,位不产生影响,1,:清除对应的,ODRy,位为,0,注:如果同时设置了,BSy,和,BRy,的对应位,,BSy,位起作用。,位,15:0,BSy,:,设置端口,x,的位,y (y = 0,15) (Port x Set bit y),这些位只能写入并只能以字,(16,位,),的形式操作。,0,:对对应的,ODRy,位不产生影响,1,:设置对应的,ODRy,位为,1,端口位清除寄存器,(,GPIOx_BRR,),地址偏移:,0x14,复位值:,0x0000 0000,位,31:16,保留。,位,15:0,BRy,:,清除端口,x,的位,y (y = 0,15) (Port x Reset bit y),这些位只能写入并只能以字,(16,位,),的形式操作。,0,:对对应的,ODRy,位不产生影响,1,:清除对应的,ODRy,位为,0,端口配置锁定寄存器,(,GPIOx_LCKR,),当执行正确的写序列设置了位,16(LCKK),时,该寄存器用来锁定端口位的配置。,位,15:0,用于锁定,GPIO,端口的配置。在规定的写入操作期间,不能改变,LCKP15:0,。当对相应的端口位执行了,LOCK,序列后,在下次系统复位之前将不能再更改端口位的配置。,每个锁定位锁定控制寄存器,(CRL, CRH),中相应的,4,个位。,地址偏移:,0x18,复位值:,0x0000 0000,位,31:17,保留。,位,16,LCKK,:锁键,(Lock key),该位可随时读出,它只可通过锁键写入序列修改。,0,:端口配置锁键位激活,1,:,端口配置锁键位被激活,下次系统复位前,GPIOx_LCKR,寄存器被锁住。,锁键的写入序列:写,1 -,写,0 -,写,1 -,读,0 -,读,1,最后一个读可省略,但可以用来确认锁键已被激活。,注:在操作锁键的写入序列时,不能改变,LCK15:0,的值。 操作锁键写入序列中的任何错误将不能激活锁键。,位,15:0,LCKy,:,端口,x,的锁位,y (y = 0,15),这些位可读可写但只能在,LCKK,位为,0,时写入。,0,:不锁定端口的配置,1,:锁定端口的配置,(1) VDD_FT,对,5,伏容忍,I/O,脚是特殊的,它与,VDD,不同,一、,GPIO,的各种模式,GPIO,管脚可以被配置为多种工作模式,其中有,3,种比较常用:高阻输入、推挽输出、开漏输出,1, 高阻输入,(Input),输入模式的结构比较简单,就是一个带有施密特触发输入的三态缓冲器(,U1,),并具有很高的输入等效阻抗。,GPIO,高阻输入模式结构示意图,施密特触发输入的作用是能将缓慢变化的或者是畸变的输入脉冲信号整形成,比较理想的矩形脉冲信号,。,执行,GPIO,管脚读操作时,在读脉冲(,Read Pulse,)的作用下会把管脚(,Pin,)的当前电平状态读到内部总线上(,Internal Bus,)。在不执行读操作时,外部管脚与内部总线之间是隔离的。,2, 推挽输出,(Output),U1,是输出锁存器,执行,GPIO,管脚写操作时,在写脉冲(,Write Pulse,)的作用下,数据被锁存到,Q,和,/Q,。,T1,和,T2,构成,CMOS,反相器,,T1,导通或,T2,导通时都表现出较低的阻抗,但,T1,和,T2,不会同时导通或同时关闭,最后形成的是推挽输出。,在推挽输出模式下,,GPIO,还具有回读功能,实现回读功能的是一个简单的三态门,U2,。,注意:执行回读功能时,读到的是管脚的输出锁存状态,而不是外部管脚,Pin,的状态。,3, 开漏输出,(,OutputOD,),开漏输出和推挽输出相比结构基本相同,但只有,下拉晶体管,T1,而没有上拉晶体,管。同样,,T1,实际上也是多组可编程选择的晶体管。,开漏输出结构没有内部上拉,因此在实际应用时通常都要外接合适的上拉电阻(通常采用,4.7,10k,)。开漏输出能够方便地实现,“,线与,”,逻辑功能,即多个开漏的管脚可以直接并在一起 。,开漏输出的另一种用途是能够方便地实现不同逻辑电平之间的转换(如,3.3V,到,5V,之间),只需外接一个上拉电阻,而不需要额外的转换电路。,典型的应用例子就是基于开漏电气连接的,I2C,总线。,4, 钳位二极管,其作用是防止从外部管,脚,Pin,输入的电压过高,或者过低。,二、,GPIO,配置,(,1,),GPIO_Mode_AIN,模拟输入,(,2,),GPIO_Mode_IN_FLOATING,浮空输入,(,3,),GPIO_Mode_IPD,下拉输入,(,4,),GPIO_Mode_IPU,上拉输入,(,5,),GPIO_Mode_Out_OD,开漏输出,(,6,),GPIO_Mode_Out_PP,推挽输出,(,7,),GPIO_Mode_AF_OD,复用开漏输出,(,8,),GPIO_Mode_AF_PP,复用推挽输出,1. I/O,口速度,GPIO_Speed_10MHz,最高输出速率,10MHz,GPIO_Speed_2MHz,最高输出速率,2MHz,GPIO_Speed_50MHz,最高输出速率,50MHz,I/O,口的输出模式下,有,3,种,输出速度,可选,(2MHz,、,10MHz,和,50MHz),,这个速度是指,I/O,口,驱动电路的响应速度而不是输出信号的速度,输出信号的速度与程序有关,。,通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。,高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的,EMI,性能。,当然如果要输出较高频率的信号,但却选用了较低频率的驱动模块,很可能会得到失真的输出信号。,关键是,GPIO,的引脚速度跟应用匹配,对于串口,假如最大波特率只需,115.2k,,那么用,2M,的,GPIO,的引脚速度就够了,既省电也噪声小。,对于,I2C,接口,假如使用,400k,波特率,若想把余量留大些,那么用,2M,的,GPIO,的引脚速度或许不够,这时可以选用,10M,的,GPIO,引脚速度。,对于,SPI,接口,假如使用,18M,或,9M,波特率,用,10M,的,GPIO,的引脚速度显然不够了,需要选用,50M,的,GPIO,的引脚速度。,2.,GPIO口设为输入时,输出驱动电路与端口是断开,所以输出速度配置无意义。,3. 在复位期间和刚复位后,复用功能未开启,I/O端口被配置成浮空输入模式。,所有端口都有外部中断能力。为了使用外部中断线,端口必须配置成输入模式。,4.,推挽输出与开漏输出的区别,推挽输出,:,可以输出高,低电平,连接数字器件,;,开漏输出,:,输出端相当于三极管的集电极,.,要得到高电平状态需要上拉电阻才行,.,适合于做电流型的驱动,其吸收电流的能力相对强,(,一般,20mA,以内,).,三、在,STM32,中选用,IO,模式,(,1,) 浮空输入,_IN_FLOATING ,浮空输入,可以做,KEY,识别,,RX1,(,2,)带上拉输入,_IPUIO,内部上拉电阻输入,(,3,)带下拉输入,_IPDIO,内部下拉电阻输入,(,4,) 模拟输入,_AIN ,应用,ADC,模拟输入,或者低功耗下省电。,(,5,)开漏输出,_OUT_OD IO,输出,0,接,GND,,,IO,输出,1,,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为,1,时,,IO,口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样,IO,口也就可以由外部电路改变为低电平或不变 。可以读,IO,输入电平变化,实现,C51,的,IO,双向功能。,(,6,)推挽输出,_OUT_PP,IO,输出,0-,接,GND,,,IO,输出,1 -,接,VCC,,读输入值是未知的。,(,7,)复用功能的推挽输出,_AF_PP,片内外设功能(,I2C,的,SCL,SDA,),(,8,)复用功能的开漏输出,_AF_OD,片内外设功能(,TX1,MOSI,MISO,SCK,SS,),实例,(,1,)模拟,I2C,使用开漏输出,_OUT_OD,,接上拉电阻,能够正确输出,0,和,1,;读值时先,GPIO_SetBits(GPIOB, GPIO_Pin_0),;拉高,然后可以读,IO,的值;使用,GPIO_ReadInputData,Bit(GPIOB, GPIO_Pin_0),;,(,2,)如果是无上拉电阻,,IO,默认是高电平;需要读取,IO,的值,可以使用,(,3,)带上拉输入,_IPU,和浮空输入,_IN_FLOATING,和 开漏输出,_OUT_OD,;,操作寄存器方法代码,#include ,02#include ,system.h,03,04,05/LED,端口定义,06,07#define LED0 PAout(4)/ PA4,08,09,void,Gpio_Init(,void,);,10,11,int,main(,void,),12,13Rcc_Init(9);/,系统时钟设置,14,Gpio_Init,();/,初始化与,LED,连接的硬件接口,15,while,(1),16,17LED0=0;,18delay(300000);/,延时,300ms,19LED0=1;,20delay(300000);,21 ,22 ,23,24,25,void,Gpio_Init(,void,),26,27RCC-APB2ENR|=1CRL,30GPIOA-CRL|=0X00030000;/PA4,推挽输出,31GPIOA-ODR|=1APB2ENR|=1APB2ENR|=1CRH,GPIOA-CRH|=0X00000003;/PA8,推,GPIOA-ODR|=1CRL,GPIOD-CRL|=0X00000300;/PD.2,推挽输出,GPIOD-ODR|=12; /PD.2,输出高,/,led.h,#,ifndef,_LED_H,#define _LED_H,#include ,sys.h,/LED,驱动代码,/LED,端口定义,#define LED0 PAout(8)/ PA8,#define LED1 PDout(2)/ PD2,void,LED_Init(void,);/,初始化,#,endif,#include ,#include ,sys.h,#include ,usart.h,#include ,delay.h,#include ,led.h,/,跑马灯实验,int,main(void,),Stm32_Clock_Init(9); /,系统时钟设置,delay_init(72); /,延时初始化,LED_Init,(); /,初始化与,LED,连接的硬件接口,while(1), LED0=0;,LED1=1;,delay_ms(300);,LED0=1;,LED1=0;,delay_ms(300);,例子(固件库操作),/,led.c,#include ,led.h,void,LED_GPIO_Config(void,),GPIO_InitTypeDef,GPIO_InitStructure,;,RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE);,GPIO_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_4 | GPIO_Pin_5); / turn off all led,/,led.h,#,ifndef,_LED_H,#define_LED_H,#include stm32f10x.h,#define ON 0,#define OFF 1,#define LED1(a)if (a)GPIO_SetBits(GPIOC,GPIO_Pin_3);,elseGPIO_ResetBits(GPIOC,GPIO_Pin_3),#define LED2(a)if (a),GPIO_SetBits(GPIOC,GPIO_Pin_4);,else,GPIO_ResetBits(GPIOC,GPIO_Pin_4),#define LED3(a)if (a)GPIO_SetBits(GPIOC,GPIO_Pin_5);,else,GPIO_ResetBits(GPIOC,GPIO_Pin_5),void,LED_GPIO_Config(void,);,#,endif,/* _LED_H */,Main,主函数,#include stm32f10x.h,#include ,led.h,void,Delay(_IO,u32,nCount,);,/*,函数名:,main,*,描述 :主函数*,/,int,main(void,),/*,配置系统时钟为,72M */,SystemInit,();,/* LED,端口初始化 *,/,LED_GPIO_Config,();,while (1),LED1( ON ); /,亮,Delay(0x6FFFEF);,LED1( OFF ); /,灭,LED2( ON );,Delay(0x6FFFEF);,LED2( OFF );,LED3( ON );,Delay(0x6FFFEF);,LED3( OFF );,void,Delay(_IO,u32,nCount,),for(;,nCount,!= 0;,nCount,-);,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!