第五章通用和复用功能课件

上传人:沈*** 文档编号:241698618 上传时间:2024-07-16 格式:PPT 页数:90 大小:3.68MB
返回 下载 相关 举报
第五章通用和复用功能课件_第1页
第1页 / 共90页
第五章通用和复用功能课件_第2页
第2页 / 共90页
第五章通用和复用功能课件_第3页
第3页 / 共90页
点击查看更多>>
资源描述
大家好大家好第五章第五章 通用和复用功能通用和复用功能I/OI/O5 5.1.1 GPIO的工作原理的工作原理 一、引脚介绍一、引脚介绍二、二、STM32GPIO主要功能主要功能 三、三、IO口的基本结构口的基本结构5 5.2.2 编程举例编程举例5.3 5.3 GPIO复用功能复用功能 一、引脚介绍一、引脚介绍STM32单片机单片机最多有最多有7个个16位位的并行的并行I/OI/O端口端口:PA、PB、PC、PD、PE、PF、PG。STM32F103单片机单片机只有只有5个个16位位的并行的并行I/OI/O端口端口:PA、PB、PC、PD、PE。(实验板型号:实验板型号:TM32F103VET6)通用通用IO口,又称为口,又称为GPIO(General-Purpose IO ports)CPU的一个接口模块,为一些协议比较简的一个接口模块,为一些协议比较简单的外部设备单的外部设备/电路提供了一种控制手段电路提供了一种控制手段。5 5.1.1 GPIO的工作原理的工作原理每每个个GPIO管管脚脚都都可可以以由由软软件件配配置置成成输输出出(推推拉拉或或开开路路)、输输入入(带带或或不不带带上上拉拉或或下下拉拉)或或其其它它的的外外设设功功能能口。口。多多数数GPIO管管脚脚都都与与数数字字或或模模拟拟的的外外设设共共用用。所所有有的的GPIO管脚都有管脚都有大电流大电流通过能力。通过能力。在在需需要要的的情情况况下下,I/O管管脚脚的的外外设设功功能能可可以以通通过过一一个个特定的操作锁定,以避免意外的写入特定的操作锁定,以避免意外的写入I/O寄存器。寄存器。在在APB2上的上的I/O脚提供高达脚提供高达18MHz的翻转速度。的翻转速度。一、引脚介绍一、引脚介绍PA口 16脚PB口16脚PC口16脚STM32F103包含包含5 5个端口:个端口:PA口口、PB口、口、PC口、口、PD口口、PE口。口。一、引脚介绍:一、引脚介绍:以以STM32F103x为例为例PD口16脚PE口16脚5 5.1.1 GPIO的工作原理的工作原理一、引脚介绍:一、引脚介绍:以以STM32F103VET6为例为例5 5.1.1 GPIO的工作原理的工作原理补充举例说明,分析流水灯例程补充举例说明,分析流水灯例程了解库开发流程了解库开发流程1 1)选择)选择GPIOGPIO端口端口2 2)选择)选择GPIOGPIO端口功能端口功能3 3)设置)设置GPIOGPIO输出高低电输出高低电平控制平控制LEDLED灯的亮灭灯的亮灭举例说明,分析流水灯例程举例说明,分析流水灯例程了解库开发流程了解库开发流程要实现功能选定与LED硬件相连的引脚选定GPIO的特定功能控制LED亮灭相应状态PD6PD3输出功能设置GPIO引脚电平的高低对应的寄存器配置引脚在D上,选择x=d配置寄存器GPIOx-CRL设置数据寄存器寄存器操作intmain(void)GPIOB-CRL=0 x3ODR=0 x0;Delay(0 xAFFFF);GPIOB-ODR=0 x20;Delay(0 xAFFFF);举例说明,分析流水灯例程举例说明,分析流水灯例程了解库开发流程了解库开发流程1 1地址映射地址映射 stm32f10 x.hstm32f10 x.h#defineGPIOD_BASE(APB2PERIPH_BASE+0 x1400)#defineAPB2PERIPH_BASE(PERIPH_BASE+0 x10000)#definePERIPH_BASE(uint32_t)0 x40000000)#defineGPIOA_BASE(APB2PERIPH_BASE+0 x0800)#defineGPIOB_BASE(APB2PERIPH_BASE+0 x0C00)#defineGPIOC_BASE(APB2PERIPH_BASE+0 x1000)#defineGPIOD_BASE(APB2PERIPH_BASE+0 x1400)#definePERIPH_BASE(uint32_t)0 x40000000)举例说明,分析流水灯例程举例说明,分析流水灯例程了解库开发流程了解库开发流程1 1地址映射地址映射STM32STM32固件库对寄存器的封装固件库对寄存器的封装#defineGPIOA(GPIO_TypeDef*)GPIOA_BASE)#defineGPIOB(GPIO_TypeDef*)GPIOB_BASE)#defineGPIOC(GPIO_TypeDef*)GPIOC_BASE)#defineGPIOD(GPIO_TypeDef*)GPIOD_BASE)#defineGPIOE(GPIO_TypeDef*)GPIOE_BASE)typedefstruct_IOuint32_tCRL;-0 x00_IOuint32_tCRH;-0 x04_IOuint32_tIDR;-0 x08_IOuint32_tODR;_IOuint32_tBSRR;_IOuint32_tBRR;_IOuint32_tLCKR;GPIO_TypeDef;举例说明,分析流水灯例程举例说明,分析流水灯例程了解库开发流程了解库开发流程2 2、STM32STM32时钟设置时钟设置在在startup_stm32f10 x_hd.sstartup_stm32f10 x_hd.s中运行中运行systemInit(),systemInit(),这个函数定义在这个函数定义在system_stm32f10 x.c,system_stm32f10 x.c,他的作用是设他的作用是设置系统时钟,置系统时钟,之后调用之后调用SetSysClock()SetSysClock()设置具体的系统时钟设置具体的系统时钟举例说明,分析流水灯例程举例说明,分析流水灯例程了解库开发流程了解库开发流程3 3、编写用户文件、编写用户文件配置配置gpiogpio口的相关操作:初始化结构体口的相关操作:初始化结构体库函数库函数GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;typedef struct typedef struct 库文件利用关键字库文件利用关键字typedeftypedef定义的新类型定义的新类型 uint16_t GPIO_Pin;uint16_t GPIO_Pin;GPIOSpeed_TypeDef GPIO_Speed;GPIOSpeed_TypeDef GPIO_Speed;GPIOMode_TypeDef GPIO_Mode;GPIOMode_TypeDef GPIO_Mode;GPIO_InitTypeDef;GPIO_InitTypeDef;举例说明,分析流水灯例程举例说明,分析流水灯例程了解库开发流程了解库开发流程3 3、编写用户文件、编写用户文件(1 1)初始化库函数)初始化库函数GPIO_InitGPIO_Init 在这个函数内部,把输入的这些参数按照一定在这个函数内部,把输入的这些参数按照一定的规则转化,进而写入寄存器,实现了配置的规则转化,进而写入寄存器,实现了配置GPIOGPIO端口端口的功能的功能举例说明,分析流水灯例程举例说明,分析流水灯例程了解库开发流程了解库开发流程3 3、编写用户文件、编写用户文件(2 2)控制)控制I/OI/O口高低电平口高低电平GPIO_SetBits GPIO_SetBits 置置1 1,ledled亮亮GPIO_ResetBitsGPIO_ResetBits举例说明,分析流水灯例程举例说明,分析流水灯例程了解库开发流程了解库开发流程3 3、编写用户文件、编写用户文件(3 3)led.hled.h头文件头文件(4 4)mainmain文件分析文件分析举例说明,分析流水灯例程举例说明,分析流水灯例程了解库开发流程了解库开发流程4 4、总结、总结1 1)为了控制)为了控制ledled,要使用,要使用GPIOGPIO外设外设2 2)了解)了解GPIOGPIO外设的功能,如何使用外设的功能,如何使用3 3)知道)知道GPIOGPIO的地址映射,挂载在的地址映射,挂载在APB2APB24)4)了解了解STST官方库对寄存器的封装官方库对寄存器的封装5 5)了解时钟树,查看)了解时钟树,查看GPIOCGPIOC时钟来源,时钟来源,PCLK2PCLK26)6)在在stm32f10 x_conf.hstm32f10 x_conf.h文件中用到的头文件文件中用到的头文件stm32f10 x_gpio.hstm32f10 x_gpio.h和和stm32f10 x_rcc.hstm32f10 x_rcc.h7 7)添加用户文件)添加用户文件led.cled.c文件文件8 8)编写驱动初始化函数)编写驱动初始化函数LED_GPIO_Config(void)LED_GPIO_Config(void)举例说明,分析流水灯例程举例说明,分析流水灯例程了解库开发流程了解库开发流程4 4、总结、总结9 9)开外设时钟)开外设时钟1010)根据要求填写)根据要求填写GPIO_InitStructureGPIO_InitStructure1111)调用初始化函数)调用初始化函数GPIO_InitGPIO_Init1212)编写相应的)编写相应的led.hled.h文件文件1313)编写主函数)编写主函数mainmain1414)调试)调试5 5.1.1 GPIO的工作原理的工作原理二、二、IO口的基本结构口的基本结构1、IO口的基本口的基本结构构图广每个每个I/O可以自由编程,单可以自由编程,单I/O口寄存器必须按口寄存器必须按32位字被访问。位字被访问。STM32的很多的很多I/O口都是口都是5V兼容的,兼容的,具体哪些具体哪些I/O口是口是5V兼容的可以从芯片手册引脚描兼容的可以从芯片手册引脚描述章节查到,述章节查到,I/OLevel标标FT的就是的就是5V电平兼容电平兼容的。的。保护二极管:避免过高或过低的电压从外部进来时保护二极管:避免过高或过低的电压从外部进来时对电路内部的损害;钳制对电路内部的损害;钳制I/O的电压在的电压在-0.7V4.0V之间之间二、二、IO口的基本结构口的基本结构5 5.1.1 GPIO的工作原理的工作原理-输入浮空-输入下拉-输入上拉-模拟输入-开漏输出-推挽式输出-推挽式复用功能-开漏复用功能5 5.1.1 GPIO的工作原理的工作原理二、二、IO口的基本结构口的基本结构2、GPIO的的8种设置模式种设置模式5 5.1.1 GPIO的工作原理的工作原理二、二、IO口的基本结构口的基本结构2、GPIO的的8种设置模式种设置模式浮空输入浮空输入图中施密特触发器是开启的,IO口的状态可以直接送到输入寄存器中,CPU可以直接读取输入寄存器5 5.1.1 GPIO的工作原理的工作原理二、二、IO口的基本结构口的基本结构2、GPIO的的8种设置模式种设置模式浮空输入浮空输入在上图上,蓝色以外的部分处于不工作状态,尤其是在上图上,蓝色以外的部分处于不工作状态,尤其是下半部分的输出电路,实际上是与端口处于隔离状态。下半部分的输出电路,实际上是与端口处于隔离状态。蓝色的高亮部分显示了数据传输通道,外部的电平信蓝色的高亮部分显示了数据传输通道,外部的电平信号通过左边编号号通过左边编号1的的I/O端口进入端口进入STM32,经过编号,经过编号2的施的施密特触发器的整形,送入编号密特触发器的整形,送入编号3的的“输入数据寄存器输入数据寄存器”,在在“输入数据寄存器输入数据寄存器”的另一端(编号的另一端(编号4),),CPU可以随可以随时读出时读出I/O端口的电平状态。端口的电平状态。5 5.1.1 GPIO的工作原理的工作原理二、二、IO口的基本结构口的基本结构2、GPIO的的8种设置模式种设置模式上拉输入上拉输入5 5.1.1 GPIO的工作原理的工作原理二、二、IO口的基本结构口的基本结构2、GPIO的的8种设置模式种设置模式上拉输入上拉输入上图是上图是STM32的的GPIO带上拉输入模式的配置。与前带上拉输入模式的配置。与前面的浮空输入模式相比,仅仅是数据通道上部,接入了面的浮空输入模式相比,仅仅是数据通道上部,接入了一个上拉电阻,根据一个上拉电阻,根据STM32的数据手册,这个上拉电的数据手册,这个上拉电阻阻值介于阻阻值介于30K50K欧姆。欧姆。同样,同样,CPU可以随时在可以随时在“输入数据寄存器输入数据寄存器”的的4端,端,读出读出I/O端口的电平状态端口的电平状态5 5.1.1 GPIO的工作原理的工作原理二、二、IO口的基本结构口的基本结构2、GPIO的的8种设置模式种设置模式下拉输入下拉输入5 5.1.1 GPIO的工作原理的工作原理二、二、IO口的基本结构口的基本结构2、GPIO的的8种设置模式种设置模式配置输入模式的总结:(对应课本配置输入模式的总结:(对应课本5.1.7)(1)输出缓冲器)输出缓冲器被禁止被禁止(2)施密特触发输入被激活)施密特触发输入被激活(3)根据输入配置(上拉、下拉或浮动)的不同,弱上拉和)根据输入配置(上拉、下拉或浮动)的不同,弱上拉和下拉电阻被连接。下拉电阻被连接。(4)出现在)出现在I/O口上的数据在每个口上的数据在每个APB2时钟被采样到时钟被采样到输入数据寄存器输入数据寄存器(5)对输入寄存器的读访问可得到)对输入寄存器的读访问可得到I/O状态状态5 5.1.1 GPIO的工作原理的工作原理二、二、IO口的基本结构口的基本结构2、GPIO的的8种设置模式种设置模式模拟输入模式模拟输入模式施密特触发器是关闭的,信号直接到ADC输入5 5.1.1 GPIO的工作原理的工作原理二、二、IO口的基本结构口的基本结构2、GPIO的的8种设置模式种设置模式模拟输入模式模拟输入模式STM32的模拟输入通道的配置则更加简单,信号从左的模拟输入通道的配置则更加简单,信号从左边编号边编号1的端口进入,从右边编号的端口进入,从右边编号2的一端直接进入的一端直接进入ADC模块。模块。上拉、下拉电阻和施密特触发器,上拉、下拉电阻和施密特触发器,均处于断开状态均处于断开状态,因此因此“输入数据寄存器输入数据寄存器”将不能反映端口上的电平状态,将不能反映端口上的电平状态,也就是说,模拟输入配置下,也就是说,模拟输入配置下,CPU不能在不能在“输入数据寄输入数据寄存器存器”上读到有效的数据。上读到有效的数据。输出缓冲器被禁止(对应输出缓冲器被禁止(对应5.1.9)5 5.1.1 GPIO的工作原理的工作原理二、二、IO口的基本结构口的基本结构2、GPIO的的8种设置模式种设置模式模拟输入模式模拟输入模式当I/O端口被配置为模拟输入配置时:端口被配置为模拟输入配置时:输出缓冲器被禁止;输出缓冲器被禁止;禁止施密特触发输入,实现了每个模拟禁止施密特触发输入,实现了每个模拟I/O引脚上的零引脚上的零消耗。施密特触发输出值被强置为消耗。施密特触发输出值被强置为0;弱上拉和下拉电阻被禁止;弱上拉和下拉电阻被禁止;读取输入数据寄存器时数值为读取输入数据寄存器时数值为0。5 5.1.1 GPIO的工作原理的工作原理二、二、IO口的基本结构口的基本结构2、GPIO的的8种设置模式种设置模式开漏输出模式开漏输出模式5 5.1.1 GPIO的工作原理的工作原理二、二、IO口的基本结构口的基本结构2、GPIO的的8种设置模式种设置模式开漏输出模式开漏输出模式当CPU在编号1端通过“位设置/清除寄存器”或“输出数据寄存器”写入数据后,该数据位将通过编号2的输出控制电路传送到编号4的I/O端口。如果CPU写入的是逻辑“1”,通过输出控制电路,编号3的N-MOS管将处于关闭状态,此时I/O端口的电平将由外部的上拉电阻决定,如果CPU写入的逻辑“0”,则编号3的N-MOS管将处于开启状态,此时I/O端口的电平编号3的N-MOS管拉到了VSS的零电位。在上图的虚线部分,施密特触发器处于开启状态,这意味着CPU可以随时监控I/O端口的状态;通过这个特性,还实现虚拟的I/O端口双向通信;只要CPU输出逻辑“1”,I/O端口的电平将完全由外部电路决定,因此,CPU可以在“输入数据寄存器”读到外部电路的信号,而不是它自己输出的逻辑“1”。开漏输出:输出端相当于三极管的集电极要得到高电平状态需要上拉电阻才行,适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内).5 5.1.1 GPIO的工作原理的工作原理二、二、IO口的基本结构口的基本结构2、GPIO的的8种设置模式种设置模式开漏输出模式开漏输出模式开漏输出使用场合:开漏输出使用场合:一般来说,开漏一般来说,开漏是用来连接不同电平的器件,匹配电平用的是用来连接不同电平的器件,匹配电平用的,因为开漏引脚,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平,如果需要同时具备输出高电平不连接外部的上拉电阻时,只能输出低电平,如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平。比如加上上拉电阻就可以提供便可以改变传输电平。比如加上上拉电阻就可以提供TTL/CMOS电平输出等。电平输出等。(上拉电阻的阻值决定了逻辑电平转换的沿的速度。阻值越大,速度越低功耗越小,所以负载电阻的选择要兼顾功耗和速度。所以负载电阻的选择要兼顾功耗和速度。)可以将多个开漏输出的可以将多个开漏输出的Pin,连接到一条线上。通过一只上拉电阻,在不增,连接到一条线上。通过一只上拉电阻,在不增加任何器件的情况下,形成加任何器件的情况下,形成“与逻辑与逻辑”关系。这也是关系。这也是I2C,SMBus等总线判等总线判断总线占用状态的原理。补充:什么是断总线占用状态的原理。补充:什么是“线与线与”?:?:其实可以简单的理解为:在所有引脚连在一起时,外接一上拉电阻,如果有其实可以简单的理解为:在所有引脚连在一起时,外接一上拉电阻,如果有一个引脚输出为逻辑一个引脚输出为逻辑0,相当于接地,与之并联的回路,相当于接地,与之并联的回路“相当于被一根导线相当于被一根导线短路短路”,所以外电路逻辑电平便为,所以外电路逻辑电平便为0,只有都为高电平时,与的结果才为逻,只有都为高电平时,与的结果才为逻辑辑1。5 5.1.1 GPIO的工作原理的工作原理二、二、IO口的基本结构口的基本结构2、GPIO的的8种设置模式种设置模式(6)推挽输出模式)推挽输出模式5 5.1.1 GPIO的工作原理的工作原理二、二、IO口的基本结构口的基本结构2、GPIO的的8种设置模式种设置模式(6)推挽输出模式)推挽输出模式当当CPU在编号在编号1端通过端通过“位设置位设置/清除寄存器清除寄存器”或或“输出数据输出数据寄存器寄存器”写入数据后,该数据位将通过编号写入数据后,该数据位将通过编号2的输出控制电路的输出控制电路传送到编号传送到编号4的的I/O端口。端口。推挽:是指两个管子交替工作。推挽:是指两个管子交替工作。如果如果CPU写入的是逻辑写入的是逻辑“1”,则编号,则编号3的的N-MOS高阻,高阻,P-MOS导通,输出导通,输出1;如果;如果CPU写入的逻辑写入的逻辑“0”,则编号,则编号3的的N-MOS导通,导通,P-MOS高高阻阻,输出,输出0。推挽输出:推挽输出:可以输出高、低电平、连接数字器件可以输出高、低电平、连接数字器件5 5.1.1 GPIO的工作原理的工作原理二、二、IO口的基本结构口的基本结构2、GPIO的的8种设置模式种设置模式当当I/O口配置成输出时:口配置成输出时:(1)输出缓冲器被激活)输出缓冲器被激活(2)施密特触发输入被激活)施密特触发输入被激活(3)弱上拉和下拉电阻被禁止)弱上拉和下拉电阻被禁止(4)出现在)出现在I/O口上的数据在每个口上的数据在每个APB2时钟被采样时钟被采样到输入数据寄存器到输入数据寄存器(5)在开漏模式时,对输入数据寄存器的读访问可得到在开漏模式时,对输入数据寄存器的读访问可得到I/O状态状态(6)在推挽模式时,对输出数据寄存器的读访问得)在推挽模式时,对输出数据寄存器的读访问得到最后一次写的值到最后一次写的值5 5.1.1 GPIO的工作原理的工作原理二、二、IO口的基本结构口的基本结构2、GPIO的的8种设置种设置 3 3个最大输出速度个最大输出速度-2MHz:USART串口,若最大波特率只需串口,若最大波特率只需115.2k-10MHz:I2C接口,若使用接口,若使用400k波特率,若想把波特率,若想把余量留大些,可以选用余量留大些,可以选用10M的的GPIO引脚速度。引脚速度。-50MHz:SPI接口,若使用接口,若使用18M或或9M波特率波特率这个速度是指这个速度是指GPIO口驱动电路的响应速度,而不是输出信号的速度,输口驱动电路的响应速度,而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在出信号的速度与程序有关(芯片内部在I/O口的输出部分安排了多个响应速口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路)。度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路)。通过选择速度来选择不同的输出驱动模块,达到最佳的通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗噪声控制和降低功耗的目的的目的。高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低。高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的频驱动电路,这样非常有利于提高系统的EMI性能。当然如果输出较高频率性能。当然如果输出较高频率的信号,但却选用了较低频率的驱动模块,很可能会得到失真的输出信号的信号,但却选用了较低频率的驱动模块,很可能会得到失真的输出信号5 5.1.1 GPIO的工作原理的工作原理二、二、IO口的基本结构口的基本结构2、GPIO的的8种设置模式种设置模式(7)开漏输出复用功)开漏输出复用功能能5 5.1.1 GPIO的工作原理的工作原理二、二、IO口的基本结构口的基本结构2、GPIO的的8种设置模式种设置模式推挽复用输出模式推挽复用输出模式5 5.1.1 GPIO的工作原理的工作原理二、二、IO口的基本结构口的基本结构2、GPIO的的8种设置模式种设置模式推挽复用输出模式推挽复用输出模式最后是最后是GPIO推挽复用输出模式。同样的道理,编号推挽复用输出模式。同样的道理,编号2的的输出控制电路的输入,与复用功能的输出端相连,此时输输出控制电路的输入,与复用功能的输出端相连,此时输出数据寄存器被从输出通道断开了,并和片上外设的输出出数据寄存器被从输出通道断开了,并和片上外设的输出信号相连接。我们将信号相连接。我们将GPIO配置成复用输出功能后,如果外配置成复用输出功能后,如果外设没有被激活,那么它的输出将不确定。设没有被激活,那么它的输出将不确定。其它部分与前述模式一直,包括对其它部分与前述模式一直,包括对“输入数据寄存器输入数据寄存器”的的读取读取之后内容参考手册之后内容参考手册P105-P106;P113-5 5.1.1 GPIO的工作原理的工作原理二、二、IO口的基本结构口的基本结构2、GPIO的的8种设置模式种设置模式推挽复用输出模式推挽复用输出模式复用功能配置复用功能配置(1)在开漏或推挽式配置中,输出缓冲器被打开)在开漏或推挽式配置中,输出缓冲器被打开(2)内置外设的信号驱动输出缓冲器(复用功能输出)、)内置外设的信号驱动输出缓冲器(复用功能输出)、(3)施密特触发输入被激活)施密特触发输入被激活(4)弱上拉和下拉电阻被禁止)弱上拉和下拉电阻被禁止(5)出现在)出现在I/O口上的数据在每个口上的数据在每个APB2时钟被采样到输时钟被采样到输入数据寄存器入数据寄存器(6)在开漏模式时,对输入数据寄存器的读访问可得到在开漏模式时,对输入数据寄存器的读访问可得到I/O状态状态(7)在推挽模式时,对输出数据寄存器的读访问得到最)在推挽模式时,对输出数据寄存器的读访问得到最后一次写的值后一次写的值三、三、STM32GPIO主要功能:主要功能:5 5.1.1 GPIO的工作原理的工作原理5.1.1通用通用I/O(GPIO)用,输入输出;用,输入输出;最最基本的功能,可以驱动最最基本的功能,可以驱动LED、可以产生、可以产生PWM、可、可以驱动蜂鸣器等等以驱动蜂鸣器等等;5.1.2单独的位设置或位清除;单独的位设置或位清除;方便软体作业,程序简单。端口配置好以后只需方便软体作业,程序简单。端口配置好以后只需GPIO_SetBits(GPIOx,GPIO_Pin_x)就可以实现对就可以实现对GPIOx的的pinx位为高电平;位为高电平;5.1.3外部中断外部中断/唤醒线:唤醒线:端口必须配置成输入模式时,所有端口都有外部中断端口必须配置成输入模式时,所有端口都有外部中断能力;能力;三、三、STM32GPIO主要功能:主要功能:5 5.1.1 GPIO的工作原理的工作原理5.1.4复用功能复用功能(AF),复用功能的端口兼有复用功能的端口兼有IO功能等。复位期间和刚复位后,功能等。复位期间和刚复位后,复用功能未开启,复用功能未开启,I/O端口被配置成浮空输入模式:端口被配置成浮空输入模式:(1)复用的输入功能,可配置成(输入浮空,上拉或下复用的输入功能,可配置成(输入浮空,上拉或下拉);拉);(2)复用的输出功能:必须配置成复用输出模式(推)复用的输出功能:必须配置成复用输出模式(推挽或开漏)挽或开漏)(3)双向复用功能:必须配置成复用输出模式(推挽)双向复用功能:必须配置成复用输出模式(推挽或开漏),输入驱动器配置成浮空输入模式或开漏),输入驱动器配置成浮空输入模式三、三、STM32GPIO主要功能:主要功能:5.1.5软件重新映射软件重新映射I/O复用功能:复用功能:为了使不同器件封装的外设为了使不同器件封装的外设I/O功能的数量达到最优,功能的数量达到最优,可以把一些复用功能重新映射到其他一些脚上。这可可以把一些复用功能重新映射到其他一些脚上。这可以通过软件配置相应的寄存器来完成。这时,复用功以通过软件配置相应的寄存器来完成。这时,复用功能就不再映射到它们的原始引脚上了;能就不再映射到它们的原始引脚上了;5.1.6GPIO锁定机制:锁定机制:主要针对复位设定的,当某端口位主要针对复位设定的,当某端口位lock后,复位后将后,复位后将不改变的此端口的位配置。不改变的此端口的位配置。5 5.1.1 GPIO的工作原理的工作原理通常有通常有5种方式使用某个引脚功能,它们的配置方式如下:种方式使用某个引脚功能,它们的配置方式如下:1)作为)作为普通普通GPIO输入输入:根据需要配置该引脚为:根据需要配置该引脚为浮空输入浮空输入、带带弱上拉输入弱上拉输入或或带弱下拉输入带弱下拉输入,同时不要使能该引脚对应的所有,同时不要使能该引脚对应的所有复用功能模块。复用功能模块。2)作为)作为普通普通GPIO输出输出:根据需要配置该引脚为:根据需要配置该引脚为推挽输出推挽输出或或开开漏输出漏输出,同时不要使能该引脚对应的所有复用功能模块。,同时不要使能该引脚对应的所有复用功能模块。3)作为普通)作为普通模拟输入模拟输入:配置该引脚为:配置该引脚为模拟输入模式模拟输入模式,同时不要同时不要使能该引脚对应的使能该引脚对应的所有复用功能模块所有复用功能模块。4)作为)作为内置外设的输入内置外设的输入:根据需要配置该引脚为:根据需要配置该引脚为浮空输入浮空输入、带带弱上拉输入弱上拉输入或或带弱下拉输入带弱下拉输入,同时使能该引脚对应的某个复用,同时使能该引脚对应的某个复用功能模块。功能模块。5)作为内置外设的输出:根据需要配置该引脚为)作为内置外设的输出:根据需要配置该引脚为复用推挽输出复用推挽输出或或复用开漏输出复用开漏输出,同时使能该引脚对应的所有复用功能模块。,同时使能该引脚对应的所有复用功能模块。注意如果有多个复用功能模块对应同一个引脚,只能使能其中注意如果有多个复用功能模块对应同一个引脚,只能使能其中之一,其它模块保持非使能状态。之一,其它模块保持非使能状态。5.2库函数库函数具体函数用法详情见具体函数用法详情见STM32固件库使用手册固件库使用手册#includestm32f10 x.hGPIO_InitTypeDefGPIO_InitStructure;#defineLED1_ONGPIO_SetBits(GPIOB,GPIO_Pin_5);#defineLED1_OFFGPIO_ResetBits(GPIOB,GPIO_Pin_5);voidDelay(_IOuint32_tnCount);Intmain(void)SystemInit();RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;/将配置为通用推挽输出GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;/速度为50MHzGPIO_Init(GPIOB,&GPIO_InitStructure);While(1)LED1_ON;Delay(0 xAFFFF);LED1_OFF;Delay(0 xAFFFF);5 5.2.2 编程举例编程举例/*名称:voidDelay(_IOuint32_tnCount)*功能:延时函数*入口参数:无*出口参数:无*说明:*调用方法:无*/voidDelay(_IOuint32_tnCount)for(;nCount!=0;nCount-);5 5.2.2 编程举例编程举例(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复用推挽输出STM32GPIO使用使用操作步骤:操作步骤:1.使能使能GPIO对应的外设时钟对应的外设时钟例如:例如:/使能使能GPIOA、GPIOB、GPIOC对应的外设时钟对应的外设时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE);2.声明一个声明一个GPIO_InitStructure结构体构体例如:例如:GPIO_InitTypeDef GPIO_InitStructure;3.选择待设置的选择待设置的GPIO管脚管脚例如:例如:/*选择待设置的选择待设置的GPIO第第7、8、9管脚位管脚位,中间加,中间加“|”符号符号*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;4.设置选中设置选中GPIO管脚的速率管脚的速率例如:例如:/*设置选中设置选中GPIO管脚的速率为最高速率管脚的速率为最高速率2MHz*/GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;/最高速率最高速率2MHz5.设置选中设置选中GPIO管脚的模式管脚的模式例如:例如:/*设置选中设置选中GPIO管脚的模式为开漏输出模式管脚的模式为开漏输出模式*/GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_OD;/开漏输出模式开漏输出模式6.根据根据GPIO_InitStructure中指定的参数初始化外设中指定的参数初始化外设GPIOX例如:例如:/*根据根据GPIO_InitStructure中指定的参数初始化外设中指定的参数初始化外设GPIOC*/GPIO_Init(GPIOC,&GPIO_InitStructure);7.其他应用其他应用例:例:将端口将端口GPIOAGPIOA的第的第1010、1515脚置脚置1 1(高电平)(高电平)GPIO_SetBits(GPIOA,GPIO_Pin_10|GPIO_Pin_15);GPIO_SetBits(GPIOA,GPIO_Pin_10|GPIO_Pin_15);例:例:将端口将端口GPIOAGPIOA的第的第1010、1515脚置脚置0 0(低电平)(低电平)GPIO_ResetBits(GPIOA,GPIO_Pin_10|GPIO_Pin_15);GPIO_ResetBits(GPIOA,GPIO_Pin_10|GPIO_Pin_15);操作实例操作实例做个跑马灯程序,做个跑马灯程序,PB.8PB.11口分别口分别4个个LED灯,当灯,当I/O为高电平时为高电平时LED灯点亮。见课本灯点亮。见课本P215#includestm32f10 x.hvoidRCC_Configuration(void);voidDelay(_IOuint32_tnCount);intmain(void)RCC-APB2ENR|=1CRL=0 x3ODR=0 x0;Delay(0 xAFFFF);GPIOB-ODR=0 x20;Delay(0 xAFFFF);5.2寄存器描述(详见寄存器描述(详见P205)例一:寄存器操作举例)例一:寄存器操作举例/*名称:voidRCC_Configuration(void)*功能:系统时钟配置为72MHZ*入口参数:无*出口参数:无*说明:*调用方法:无*/voidRCC_Configuration(void)SystemInit();/*名称:voidDelay(_IOuint32_tnCount)*功能:延时函数*入口参数:无*出口参数:无*说明:*调用方法:无*/voidDelay(_IOuint32_tnCount)for(;nCount!=0;nCount-);#include“stm32f10 x.h“位带操作的实例位带操作的实例/位绑定的定义#defineGPIOA_ODR_A(GPIOA_BASE+0 x0c)#defineGPIOA_IDR_A(GPIOA_BASE+0 x08)#defineGPIOB_ODR_B(GPIOB_BASE+0 x0c)#defineGPIOB_IDR_B(GPIOB_BASE+0 x08)/位绑定的公式#defineBitBand(Addr,BitNum)*(volatileunsignedlong*)(Addr&0 xf0000000)+0 x2000000+(Addr&0 xfffff)5)+(BitNumCRL=0 x33333333;GPIOA-CRH=0 x44444444;/2.输入状态反应到输出引脚上while(1)if(PAin(8)=1)PAout(0)=1;elsePAout(0)=0;if(PAin(9)=1)PAout(1)=1;elsePAout(1)=0;5.3 GPIO5.3 GPIO复用功能复用功能AFIOAlternativeFunctionIO同一管脚,不仅作为同一管脚,不仅作为GPIO,也可作为其他特殊功,也可作为其他特殊功能使用能使用即即同一管脚,多种应用同一管脚,多种应用5.3 GPIO5.3 GPIO复用功能复用功能当当LSE振荡器关闭时,振荡器关闭时,LSE振荡器引脚振荡器引脚OSC32_IN/OSC32_OUT可以分别用做可以分别用做GPIO的的PC14/PC15,LSE功能始终优先于通用功能始终优先于通用I/O口的功能口的功能。5.3.2 BXCAN复用功能重映射复用功能重映射CAN信号可以被映射到端口信号可以被映射到端口A、端口、端口B或端口或端口D上,如下表所示。上,如下表所示。对于端口对于端口D,在,在36、48和和64脚的封装上没有重映射功能。脚的封装上没有重映射功能。5.3 GPIO5.3 GPIO复用功能复用功能JTAG/SWD复用功能重映射复用功能重映射调试接口信号被映射到GPIO端口上,如下表所示。表 调试接口信号5.3 GPIO5.3 GPIO复用功能复用功能表 调试端口映像5.3 GPIO5.3 GPIO复用功能复用功能5.3.4定时器复用功能重映射定时器复用功能重映射定时器4的通道1到通道4可以从端口B重映射到端口D。其他定时器的重映射列在下表。参见复用重映射和调试I/O配置寄存器(AFIO_MAPR)定时器4复用功能重映像5.3 GPIO5.3 GPIO复用功能复用功能定时器3复用功能重映像定时器2复用功能重映像5.3 GPIO5.3 GPIO复用功能复用功能定时器1复用功能重映像5.3 GPIO5.3 GPIO复用功能复用功能5.3 GPIO5.3 GPIO复用功能复用功能5.3 GPIO5.3 GPIO复用功能复用功能5.3 GPIO5.3 GPIO复用功能复用功能5.3 GPIO5.3 GPIO复用功能复用功能使用默认复用功能前必须对端口位配置寄存器编程。对于复用的输入功能复用的输入功能,端口可以配置成:输入模式(浮空、上输入模式(浮空、上或下或下)复用功能输出模式:输入驱动器被配置成浮空输入模式复用功能输出模式:输入驱动器被配置成浮空输入模式对于对于复用输出功能复用输出功能,端口必须配置成复用功能输出模式(推,端口必须配置成复用功能输出模式(推挽或开挽或开)。)。对于双向复用功能,端口位必须配置复用功能输出模式(推对于双向复用功能,端口位必须配置复用功能输出模式(推挽或开挽或开)。这时,输入驱动器被配置成浮空输入模式。)。这时,输入驱动器被配置成浮空输入模式。如果把一端口配置成复用输出功能,将使引脚和输出寄存器断如果把一端口配置成复用输出功能,将使引脚和输出寄存器断开,并和片上外设的输出信号连接。开,并和片上外设的输出信号连接。如果软件把一个如果软件把一个GPIO脚配置成复用输出功能,但是外设没有脚配置成复用输出功能,但是外设没有被激活,它的输出将被激活,它的输出将确定。确定。5.3 GPIO5.3 GPIO复用功能复用功能STM32外部中断外部中断ARMCortex-m3内核支持内核支持256个个“中断通道中断通道”(16个内核个内核+240个外部)和可编程个外部)和可编程256级级中断优先级设置。中断优先级设置。STM32采用采用Cortex-m3内核,但是内核,但是STM32并没有使用并没有使用Cortex-m3的全部资源。的全部资源。STM32目前支持目前支持76个个“中断通道中断通道”(16个内核个内核+60个外部)个外部)和可编程和可编程16级级中断优先级设置。中断优先级设置。(参考书册(参考书册P132,表表55)STM32的外部中断通道已经固定分配给相应的外设。的外部中断通道已经固定分配给相应的外设。STM32外部中断外部中断NVIC在内核中的位置在内核中的位置1、NVIC相关知识回顾相关知识回顾STM32外部中断外部中断NVIC在内核中的位置在内核中的位置1、NVIC相关知识回顾相关知识回顾NVIC的的NVIC_Init()库函数封装在库函数封装在misc.c在在NVIC初始化,首先定义并填充一个初始化,首先定义并填充一个NVIC_InitTypeDef类型的类型的结构体结构体4bit的中断优先级可以分成的中断优先级可以分成2组,从高位看,组,从高位看,前面定义的前面定义的是抢占式优先级,后面是响应优先级是抢占式优先级,后面是响应优先级。按照这种分组,。按照这种分组,4bit一共可以分成一共可以分成5组组第第0组:所有组:所有4bit用于指定响应优先级;用于指定响应优先级;第第1组:最高组:最高1位用于指定抢占式优先级,后面位用于指定抢占式优先级,后面3位用于指定位用于指定响应优先级;响应优先级;第第2组:最高组:最高2位用于指定抢占式优先级,后面位用于指定抢占式优先级,后面2位用于指定位用于指定响应优先级;响应优先级;第第3组:最高组:最高3位用于指定抢占式优先级,后面位用于指定抢占式优先级,后面1位用于指定位用于指定响应优先级;响应优先级;第第4组:所有组:所有4位用于指定抢占式优先级。由以下函数实现:位用于指定抢占式优先级。由以下函数实现:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2)/2位位抢占优先级抢占优先级1、NVIC相关知识回顾相关知识回顾2、STM32-GPIO外部中断外部中断相关知识回顾相关知识回顾中断分中断分类STM32的EXTI控制器控制器支持19个外部中断个外部中断/事件事件请求。每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。STM32的19个外部中断对应着19路中断路中断线,分别是EXTI_Line0-EXTI_Line18:线015:对应外部IO口的输入中断。线16:连接到PVD输出。线17:连接到RTC闹钟事件。线18:连接到USB唤醒事件。触触发发方式方式:STM32的外部中断是通通过边过边沿来触沿来触发发的,不支持不支持电电平触平触发发。外部中断分外部中断分组组:STM32的每一个每一个GPIO都能配置成一个外部中都能配置成一个外部中断触断触发源源,STM32通过根据引脚的序号不同将众多中断触发源分成不同的组,比如:PA0,PB0,PC0,PD0,PE0为第一组,那么依此类推,我们能得出一共有16组,STM32规定,定,每一每一组中同中同时只能有一个中断触只能有一个中断触发源工作,源工作,那么,最多工作的也就是16个外部中断。中断和事件中断和事件(续)(续)外部中断外部中断/事件线路映像事件线路映像80(低密度(低密度STM32F10 x)或)或112个个(中、高密度(中、高密度STM32F10 x)GPIO端口以端口以左左图的方式的方式连接到接到16个外部个外部中断中断/事件事件线上上:另外三种其他的外部中断另外三种其他的外部中断/事件控制事件控制器的连接如下器的连接如下:EXTI 线线 16 连接到连接到 PVD 输出输出EXTI 线线 17 连接到连接到 RTC 闹钟事件闹钟事件EXTI 线线 18 连接到连接到 USB 唤醒事件唤醒事件2、STM32-GPIO外部中断外部中断相关知识回顾相关知识回顾在此情况下,我们智能使用类似于在此情况下,我们智能使用类似于PB1,PC2这种末端序这种末端序号不同的外部中断源。每一组使用一个中断标志号不同的外部中断源。每一组使用一个中断标志EXTIx。EXTI0EXTI4这这5个外部中断有着自己的单独的中断响应个外部中断有着自己的单独的中断响应函数,函数,EXTI5-9共用一个中断响应函数,共用一个中断响应函数,EXTI10-15共用共用一个中断响应函数,参考手册一个中断响应函数,参考手册P130表表552、STM32-GPIO外部中断外部中断相关知识回顾相关知识回顾EXTI的的EXTI_Init()库函数封装库函数封装stm32f10 x_exti.c在在EXTI初始化,首先定义并填充一个初始化,首先定义并填充一个EXTI_InitTypeDef类型的类型的结构体结构体2、STM32-GPIO外部中断外部中断相关知识回顾相关知识回顾使用使用GPIO外部中断的基本步骤如下外部中断的基本步骤如下:STM32的每个的每个IO口都可以作为口都可以作为中断输入中断输入,这点很好用。要把,这点很好用。要把IO口作为外部中断输入,有以下几个步骤:口作为外部中断输入,有以下几个步骤:1)开启开启IO口时钟和复用时钟口时钟和复用时钟由于由于GPIO并不是专用的中断引脚,这样我们要先开启相应时钟并不是专用的中断引脚,这样我们要先开启相应时钟和复用时钟和复用时钟2)初始化)初始化IO口为输入。口为输入。这一步设置你要作为外部中断输入的这一步设置你要作为外部中断输入的IO口的状态,可以设置为口的状态,可以设置为上拉上拉/下拉输入,也可以设置为浮空输入,但浮空的时候外部一下拉输入,也可以设置为浮空输入,但浮空的时候外部一定要带上拉,或者下拉电阻。否则可能导致中断不停的触发。定要带上拉,或者下拉电阻。否则可能导致中断不停的触发。在干扰较大的地方,就算使用了上拉在干扰较大的地方,就算使用了上拉/下拉,也建议使用外部上下拉,也建议使用外部上拉拉/下拉电阻,这样可以一定程度防止外部干扰带来的影响。下拉电阻,这样可以一定程度防止外部干扰带来的影响。3)在库函数中,配置在库函数中,配置GPIO与中断线的映射关系的与中断线的映射关系的函数函数GPIO_EXTILineConfig()来实现的:来实现的:voidGPIO_EXTILineConfig(uint8_tGPIO_PortSource,uint8_tGPIO_PinSource)该函数将该函数将GPIO端口与中断线映射起来,使用范例是:端口与中断线映射起来,使用范例是:GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);将中断线将中断线2与与GPIOE映射起来,那么很显然是映射起来,那么很显然是GPIOE.2与与EXTI2中中断线连接了。设置好中断线映射之后,那么到底来自这个断线连接了。设置好中断线映射之后,那么到底来自这个IO口的中断口的中断是通过什么方式触发的呢?接下来我们就要设置该中断线上中断的初是通过什么方式触发的呢?接下来我们就要设置该中断线上中断的初始化参数了。始化参数了。中断线上中断的初始化是通过函数中断线上中断的初始化是通过函数EXTI_Init()实现的。实现的。EXTI_Init()函函数的定义是:数的定义是:voidEXTI_Init(EXTI_InitTypeDef*EXTI_InitStruct);固件库固件库P993)在库函数中,配置在库函数中,配置GPIO与中断线的映射关系的与中断线的映射关系的函数函数EXTI外部中断配置(中断源的选择,清除中断标志,触发模式)。外部中断配置(中断源的选择,清除中断标志,触发模式)。这一步,我们要配置中断产生的条件,这一步,我们要配置中断产生的条件,STM32可以配置成上升沿触发,可以配置成上升沿触发,下降沿触发,或者任意电平变化触发,但是不能配置成下降沿触发,或者任意电平变化触发,但是不能配置成高电平触发和高电平触发和低电平触发低电平触发。这里根据自己的实际情况来配置。同时要开启中断线上。这里根据自己的实际情况来配置。同时要开启中断线上的中断,这里需要注意的是:如果使用外部中断,并设置该中断的的中断,这里需要注意的是:如果使用外部中断,并设置该中断的EMR位的话,会引起软件仿真不能跳到中断,而硬件上是可以的。而位的话,会引起软件仿真不能跳到中断,而硬件上是可以的。而不设置不设置EMR,软件仿真就可以进入中断服务函数,并且硬件上也是可,软件仿真就可以进入中断服务函数,并且硬件上也是可以的。建议不要配置以的。建议不要配置EMR位。位。中断线上中断的初始化是通过函数中断线上中断的初始化是通过函数EXTI_Init()实现的。实现的。EXTI_Init()函函数的定义是:数的定义是:voidEXTI_Init(EXTI_InitTypeDef*EXTI_InitStruct);固件库固件库P994)配置中断分组()配置中断分组(NVIC),并使能中断),并使能中断配置中断分组(配置中断分组(NVIC),并使能中断(分组,指定优先级,使能),并使能中断(分组,指定优先级,使能)这一步,我们就是配置中断的分组,以及使能,对这一步,我们就是配置中断的分组,以及使能,对STM32的中断来说,的中断来说,只有配置了只有配置了NVIC的设置,并开启才能被执行,否则是
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


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

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


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