




已阅读5页,还剩67页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.,1,GPIO设计,.,2,.,3,输出模式位,.,4,端口配置低寄存器(GPIOx_CRL)(x=A.E),偏移地址:0 x00复位值:0 x44444444,.,5,位31:3027:2623:2219:1815:1411:107:63:2,CNFy1:0:端口x配置位(y=815)(Portxconfig-urationbits)软件通过这些位配置相应的I/O端口。在输入模式(MODE1:0=00):00:模拟输入模式01:浮空输入模式(复位后的状态)10:上拉/下拉输入模式11:保留在输出模式(MODE1:000):00:通用推挽输出模式01:通用开漏输出模式10:复用功能推挽输出模式11:复用功能开漏输出模式,.,6,位29:2825:2421:2017:1613:129:85:41:0,MODEy1:0:端口x的模式位(y=07)(Portxmodebits)软件通过这些位配置相应的I/O端口。00:输入模式(复位后的状态)01:输出模式,最大速度10MHz10:输出模式,最大速度2MHz11:输出模式,最大速度50MHz,.,7,偏移地址:0 x04复位值:0 x44444444,端口配置高寄存器(GPIOx_CRH),.,8,CNFy1:0:端口x配置位(y=815)软件通过这些位配置相应的I/O端口。在输入模式(MODE1:0=00):00:模拟输入模式01:浮空输入模式(复位后的状态)10:上拉/下拉输入模式11:保留在输出模式(MODE1:000):00:通用推挽输出模式01:通用开漏输出模式10:复用功能推挽输出模式11:复用功能开漏输出模式,位31:3027:2623:2219:1815:1411:107:63:2,.,9,MODEy1:0:端口x的模式位(y=815)软件通过这些位配置相应的I/O端口。00:输入模式(复位后的状态)01:输出模式,最大速度10MHz10:输出模式,最大速度2MHz11:输出模式,最大速度50MHz,位29:2825:2421:2017:1613:129:85:41:0,.,10,地址偏移:0 x08复位值:0 x0000XXXX,端口输入数据寄存器(GPIOx_IDR),.,11,位31:16保留,始终读为0。位15:0IDRy15:0:端口输入数据(y=015)(Portinputdata)这些位为只读并只能以字(16位)的形式读出。读出的值为对应I/O口的状态。,.,12,地址偏移:0Ch复位值:0 x00000000,端口输出数据寄存器(GPIOx_ODR),.,13,位31:16保留,始终读为0。位15:0ODRy15:0:端口输出数据(y=015)这些位可读可写并只能以字(16位)的形式操作。注:对GPIOx_BSRR(x=AE),可以分别地对各个ODR位进行独立的设置/清除。,.,14,端口位设置/清除寄存器(GPIOx_BSRR),地址偏移:0 x10复位值:0 x00000000,.,15,位31:16BRy:清除端口x的位y(y=015)(PortxResetbity)这些位只能写入并只能以字(16位)的形式操作。0:对对应的ODRy位不产生影响1:清除对应的ODRy位为0注:如果同时设置了BSy和BRy的对应位,BSy位起作用。,.,16,位15:0BSy:设置端口x的位y(y=015)(PortxSetbity)这些位只能写入并只能以字(16位)的形式操作。0:对对应的ODRy位不产生影响1:设置对应的ODRy位为1,.,17,端口位清除寄存器(GPIOx_BRR),地址偏移:0 x14复位值:0 x00000000,.,18,位31:16保留。位15:0BRy:清除端口x的位y(y=015)(PortxResetbity)这些位只能写入并只能以字(16位)的形式操作。0:对对应的ODRy位不产生影响1:清除对应的ODRy位为0,.,19,端口配置锁定寄存器(GPIOx_LCKR),当执行正确的写序列设置了位16(LCKK)时,该寄存器用来锁定端口位的配置。位15:0用于锁定GPIO端口的配置。在规定的写入操作期间,不能改变LCKP15:0。当对相应的端口位执行了LOCK序列后,在下次系统复位之前将不能再更改端口位的配置。每个锁定位锁定控制寄存器(CRL,CRH)中相应的4个位。地址偏移:0 x18复位值:0 x00000000,.,20,位31:17保留。位16LCKK:锁键(Lockkey)该位可随时读出,它只可通过锁键写入序列修改。0:端口配置锁键位激活1:端口配置锁键位被激活,下次系统复位前GPIOx_LCKR寄存器被锁住。锁键的写入序列:写1-写0-写1-读0-读1最后一个读可省略,但可以用来确认锁键已被激活。注:在操作锁键的写入序列时,不能改变LCK15:0的值。操作锁键写入序列中的任何错误将不能激活锁键。,.,21,.,22,位15:0LCKy:端口x的锁位y(y=015)这些位可读可写但只能在LCKK位为0时写入。0:不锁定端口的配置1:锁定端口的配置,.,23,.,24,(1)VDD_FT对5伏容忍I/O脚是特殊的,它与VDD不同,.,25,一、GPIO的各种模式GPIO管脚可以被配置为多种工作模式,其中有3种比较常用:高阻输入、推挽输出、开漏输出1高阻输入(Input)输入模式的结构比较简单,就是一个带有施密特触发输入的三态缓冲器(U1),并具有很高的输入等效阻抗。,GPIO高阻输入模式结构示意图,.,26,施密特触发输入的作用是能将缓慢变化的或者是畸变的输入脉冲信号整形成比较理想的矩形脉冲信号。执行GPIO管脚读操作时,在读脉冲(ReadPulse)的作用下会把管脚(Pin)的当前电平状态读到内部总线上(InternalBus)。在不执行读操作时,外部管脚与内部总线之间是隔离的。,.,27,2推挽输出(Output),.,28,U1是输出锁存器,执行GPIO管脚写操作时,在写脉冲(WritePulse)的作用下,数据被锁存到Q和/Q。T1和T2构成CMOS反相器,T1导通或T2导通时都表现出较低的阻抗,但T1和T2不会同时导通或同时关闭,最后形成的是推挽输出。在推挽输出模式下,GPIO还具有回读功能,实现回读功能的是一个简单的三态门U2。注意:执行回读功能时,读到的是管脚的输出锁存状态,而不是外部管脚Pin的状态。,.,29,3开漏输出(OutputOD)开漏输出和推挽输出相比结构基本相同,但只有下拉晶体管T1而没有上拉晶体管。同样,T1实际上也是多组可编程选择的晶体管。,.,30,开漏输出结构没有内部上拉,因此在实际应用时通常都要外接合适的上拉电阻(通常采用4.710k)。开漏输出能够方便地实现“线与”逻辑功能,即多个开漏的管脚可以直接并在一起。开漏输出的另一种用途是能够方便地实现不同逻辑电平之间的转换(如3.3V到5V之间),只需外接一个上拉电阻,而不需要额外的转换电路。典型的应用例子就是基于开漏电气连接的I2C总线。,.,31,4钳位二极管其作用是防止从外部管脚Pin输入的电压过高或者过低。,.,32,二、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复用推挽输出,.,33,1.I/O口速度GPIO_Speed_10MHz最高输出速率10MHzGPIO_Speed_2MHz最高输出速率2MHzGPIO_Speed_50MHz最高输出速率50MHzI/O口的输出模式下,有3种输出速度可选(2MHz、10MHz和50MHz),这个速度是指I/O口驱动电路的响应速度而不是输出信号的速度,输出信号的速度与程序有关。,.,34,通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI性能。当然如果要输出较高频率的信号,但却选用了较低频率的驱动模块,很可能会得到失真的输出信号。,.,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端口被配置成浮空输入模式。所有端口都有外部中断能力。为了使用外部中断线,端口必须配置成输入模式。,.,37,4.推挽输出与开漏输出的区别推挽输出:可以输出高,低电平,连接数字器件;开漏输出:输出端相当于三极管的集电极.要得到高电平状态需要上拉电阻才行.适合于做电流型的驱动,其吸收电流的能力相对强(一般20mA以内).,.,38,三、在STM32中选用IO模式(1)浮空输入_IN_FLOATING浮空输入,可以做KEY识别,RX1(2)带上拉输入_IPUIO内部上拉电阻输入(3)带下拉输入_IPDIO内部下拉电阻输入(4)模拟输入_AIN应用ADC模拟输入,或者低功耗下省电。(5)开漏输出_OUT_ODIO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为1时,IO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样IO口也就可以由外部电路改变为低电平或不变。可以读IO输入电平变化,实现C51的IO双向功能。,.,39,(6)推挽输出_OUT_PPIO输出0-接GND,IO输出1-接VCC,读输入值是未知的。(7)复用功能的推挽输出_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_ReadInputDataBit(GPIOB,GPIO_Pin_0);(2)如果是无上拉电阻,IO默认是高电平;需要读取IO的值,可以使用(3)带上拉输入_IPU和浮空输入_IN_FLOATING和开漏输出_OUT_OD;,.,41,操作寄存器方法代码#include02#includesystem.h030405/LED端口定义0607#defineLED0PAout(4)/PA40809voidGpio_Init(void);,.,42,1011intmain(void)1213Rcc_Init(9);/系统时钟设置14Gpio_Init();/初始化与LED连接的硬件接口15while(1)1617LED0=0;18delay(300000);/延时300ms,.,43,19LED0=1;20delay(300000);2122232425voidGpio_Init(void)26,.,44,27RCC-APB2ENR|=1CRL/PA4输出高3233,.,45,.,46,01#includestm32f10 x.h“0203voidRCC_Configuration(void);04voidGPIO_Configuration(void);05voiddelay(vu32n);/延时函数0607intmain(void)08,.,47,09RCC_Configuration();10GPIO_Configuration();1112while(1)1314GPIO_SetBits(GPIOA,GPIO_Pin_4);/调用库函数将LED_1置1输出高电平15,.,48,16delay(2000000);171819GPIO_ResetBits(GPIOA,GPIO_Pin_4);2021delay(2000000);22232425voidGPIO_Configuration(void)2627GPIO_InitTypeDefGPIO_InitStructure;结构体初始化2829GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;30GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;31GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;32GPIO_Init(GPIOA,3940,.,49,29GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;30GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;31GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;32GPIO_Init(GPIOA,36,.,50,.,51,四、通用IO端口(GPIO)初始化基本步骤步骤一声明GPIO的结构GPIO_InitTypeDefGPIO_InitStructure;步骤二为变量GPIO_InitStructure的成员赋值,如果只设置其中的一部分成员,我们需要如下代码:,.,52,GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOB,.,53,步骤三调用函数GPIO_Init()来初始化外设GPIO,代码如下:GPIO_Init(GPIOC,步骤四使能。注意,在固件库中GPIO没有GPIO_Cmd的函数,因此这个步骤省略。,.,54,4.1GPIO初始化RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|B|C,ENABLE):使能APB2总线外设时钟RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA|B|C,DISABLE):释放GPIO复位。,.,55,.,56,芯片资料介绍,芯片名字,.,57,晶振,ROM,RAM,.,58,相当于C语言中#Define,头文件的路径,.,59,有开发板,没有开发板时选择,.,60,DEBUG,.,61,例子(寄存器操作),/led.c/初始化PA8和PD2为输出口.并使能这两个口的时钟/LEDIO初始化voidLED_Init(void)RCC-APB2ENR|=1APB2ENR|=1CRH/PD.2输出高,.,63,/led.h#ifndef_LED_H#define_LED_H#includesys.h/LED驱动代码/LED端口定义#defineLED0PAout(8)/PA8#defineLED1PDout(2)/PD2voidLED_Init(void);/初始化#endif,.,64,#include#includesys.h#includeusart.h#includedelay.h#includeled.h/跑马灯实验intmain(void)Stm32_Clock_Init(9);/系统时钟设置,.,65,delay_init(72);/延时初始化LED_Init();/初始化与LED连接的硬件接口while(1)LED0=0;LED1=1;delay_ms(300);LED0=1;LED1=0;delay_ms(300);,.,66,例子(固件库操作),/led.c#includeled.hvoidLED_GPIO_Config(void)GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);,.,67,GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Sp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年货物总代理授权协议书
- 2025年炉渣供应协议样本
- 企业并购中的法律注意事项
- 2025年合作发展协议书(数据处理公司)
- 2025年代理权与咨询服务协议书
- 2025年体育场地施工合作协议
- 智能物流与制造业供应链优化
- 深化文化体制机制改革的现状及总体形势
- 理赔业务流程复杂度风险基础知识点归纳
- 理赔业务风险管理跨部门执行风险基础知识点归纳
- 4.1+陆地水体及其相互关系1河流的补给课件【要点精讲+拓展提升】人教版(2019)高中地理选择性必修1+
- 中秋节起源及相关习俗介绍
- 美国家庭万用亲子英文英语8000句(一)
- 建筑装饰装修施工课件
- 雷雨第四幕剧本由中门上不做声地走进来雨衣上雨还在往下滴发鬓有些
- 江苏省南京市建邺区2020-2021学年五年级下学期期末数学试卷含答案
- 企业安全生产主体责任落实二
- 新工艺、新技术、新设备、新材料的采用详解
- 02R112 拱顶油罐图集
- 浙江省建设工程“钱江杯”奖(优质工程)评审细则 申报工程
- 【科目一考试】安徽省东至县驾校模拟考试练习300题
评论
0/150
提交评论