第5章通用输入输出GPIO模块课件.pptx
《第5章通用输入输出GPIO模块课件.pptx》由会员分享,可在线阅读,更多相关《第5章通用输入输出GPIO模块课件.pptx(75页珍藏版)》请在三一办公上搜索。
1、,第5章,通用输入输出GPIO模块,STM32,本章知识与能力要求,了解GPIO的基本概念;理解STM32F103微控制器GPIO的内部结构、工作模式和使用特性;理解GPIO的输入输出模式;熟悉STM32F103微控制器GPIO相关的标准外设库函数和HAL库函数;掌握基于标准外设库实现LED灯闪烁的方法;掌握基于HAL库实现LED灯闪烁的方法。,第5章 通用输入输出GPIO模块,5.1 GPIO概述,GPIO端口内部是由一个个寄存器组成,一个引脚对应一个寄存器或多个引脚对应一个多位的寄存器,改变寄存器中的数据就可以改变外设的工作方式。,与51单片机相比,STM32拥有更多的I/O引脚,其驱动能
2、力更强,控制方式更多更灵活,功能也更强大。,5.2 STM32的GPIO工作原理,5.2.1 STM32F103引脚图,STM32F103ZET6一共有144个引脚,这些引脚共分为六大类:电源引脚:VDD、VSS、VREF+、VREF-、VDDA、VSSA、VBAT;晶振引脚:PC14、PC15和OSC_IN、OSC_OUT复位引脚:NRST。BOOT引脚:BOOT0、BOOT1;程序下载引脚:PA13、PA14、PA15、PB3和PB4GPIO引脚:共有7组GPIO,分别为:PA组:PA0PA15; PB组:PB0 PB15;PC组:PC0 PC15; PD组:PD0 PD15;PE组:PE
3、0PE15; PF组:PF0PF15;PG组:PG0PG15;,大多数引脚还通过复用技术兼具其他专用功能。,5.2.2 GPIO内部结构,STM32F103系列微控制器GPIO端口的基本结构,5.2.2 GPIO内部结构,GPIO,PA组,PB组,PC组,PD组,PE组,PF组,PG组,PA0PA15,PB0PB15,PC0PC15,PD0PD15,PE0PE15,PF0PF15,PG0PG15,16个引脚,16个引脚,16个引脚,16个引脚,16个引脚,16个引脚,16个引脚,STM32F103系列微控制器共有7组GPIO端口,每一组端口包括16个引脚,如PA组端口,包括PA0PA15共16
4、个引脚。,5.2.2 GPIO内部结构,每组GPIO端口(Px)都由7个寄存器组成,负责控制该端口的16个引脚Px0 Px15。,5.2.3 GPIO工作模式,推挽结构一般指两个MOS管受互补信号的控制,按互补对称的方式连接,任意时刻总是一个三极管导通,另一个截止。,推挽输出模式(Push-Pull,PP),使用推挽输出模式的目的:增大输出电流,即增加输出引脚的驱动能力,提高电路的负载能力和提高开关的速度。,推挽模式下,I/O引脚输出高电平时,P-MOS导通,推挽模式下,I/O引脚输出低电平时,N-MOS导通,漏极开路(OD)输出与集电极开路输出十分相似,即只有下拉MOS管没有上拉MOS管,M
5、OS管的漏极直接与I/O引脚相连,不与电源连接,处于悬空状态,称之为漏极开路。,开漏输出模式(Open-Drain,OD),开漏输出模式的应用场合,复用功能输出模式(Alternate Function,AF),STM32F103系列微控制器有144个引脚,其中的GPIO引脚除了作为通用输入/输出引脚使用外,还可以作为片上外设(如串口、ADC、IIC等)的I/O引脚,即一个引脚可以作为多个外设引脚使用,称为复用I/O端口AFIO(Alternate Function I/O),但一个引脚某一时刻只能使用复用功能中的一个。,输入模式,模拟输入模式,模拟输入模式下,施密特触发器关闭,既不接上拉电阻
6、也不连接下拉电阻,引脚信号连接到芯片内部的片上外设,其典型应用是A/D模拟输入,对外部信号进行采集。,5.2.4 GPIO输出速度,输出速度并不是输出信号的速度,而是指I/O口驱动电路的响应速度。,STM32F103系列微控制器的I/O引脚的输出速度有3种选择:2MHz、10MHz和50MHz。,实际开发中,需要结合系统实际情况选择合适的响应速度,以确保信号的稳定性和降低功耗等。,一般常用的外设如LED、蜂鸣器等建议采用2MHz的输出速度,而用作IIC、SPI等复用功能的输出引脚时,则尽量选择高响应速度如10MHz或50MHz。,5.3 GPIO模块的标准外设库接口函数及应用,5.3.1 GP
7、IO标准外设库接口函数,GPIO的标准外设库接口函数的源码在源文件stm32f10 x_gpio.c中,其对应的头文件stm32f10 x_gpio.h声明了GPIO所有的库函数,共18种。,5.3.1 GPIO标准外设库接口函数,如果想要查看具体的函数定义实现,可在keil 5工程中将光标放在想要查看的函数上,然后右键选择“Go To Definition of”,即可跳转到相应函数的函数体中,5.3.1 GPIO标准外设库接口函数,GPIO_Init()函数用于初始化GPIO,有两个输入参数:第一个参数用于指定GPIO的具体端口x(x=A,B,C,D,E)第二个参数根据GPIO_InitS
8、truct结构体变量中指定的参数初始化GPIO,GPIO_InitStruct是指向GPIO_InitTypeDef结构体的指针。,GPIO_Init()函数源码,5.3.1 GPIO标准外设库接口函数,GPIO的配置参数,如具体的GPIO引脚、输出速度、GPIO引脚的工作模式等。,GPIO_InitTypeDef结构体定义在stm32f10 x_gpio.h,5.3.1 GPIO标准外设库接口函数,5.3.2 GPIO标准外设库应用实例,采用基于标准外设库设计方式,利用单个GPIO引脚输出高低电平控制发光二极管,并按一定时间间隔改变I/O口电平,实现灯光闪烁效果。,功能,硬件设计,改变限流电
9、阻R1的值可改变发光二极管的亮度,一般选用400 1K 电阻。,主流程图由两部分构成: 初始化函数部分; 一个无限循环功能部分。,5.3.2 GPIO标准外设库应用实例,5.3.2 GPIO标准外设库应用实例,用于存放led.c文件的管脚定义、全局变量声明和函数声明等内容。,#ifndef _LED_H#define _LED_H#include stm32f10 x.hvoid LED_Init(void); /函数声明#endif,led.h头文件,5.3.2 GPIO标准外设库应用实例,#include led.hvoid LED_Init(void) GPIO_InitTypeDef
10、GPIO_InitStructure; /定义一个GPIO_InitTypeDef类型的结构体变量 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); /开启GPIOB的时钟 PIO_InitStructure.GPIO_Pin = GPIO_Pin_5; /选择要使用的I/O引脚,此处选择PB5引脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /设置引脚输出模式为推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /设置引脚的输
11、出速度为50MHz GPIO_Init(GPIOB, /调用初始化库函数初始化GPIOB端口,新建一个led.c文件:用于GPIO端口初始化操作,即硬件驱动程序的编写。,5.3.2 GPIO标准外设库应用实例,#include stm32f10 x.h#include led.h/*函数名:Delay*功能描述:不精确的延时,延时时间= nCount/72000,单位为ms,72MHz为STM32主频*输入参数:nCount*输出参数:无*/void Delay(_IO u32 nCount) for(;nCount !=0;nCount-);,int main(void) LED_Init(
12、); while(1) GPIO_SetBits(GPIOB,GPIO_Pin_5); /调用GPIO_SetBits函数,将PB5置为高电平,熄灭LED Delay(720000); /调用延迟函数,延迟10ms GPIO_ResetBits(GPIOB,GPIO_Pin_5); /调用GPIO_ReSetBits函数,将PB5置为低电平,点亮LED Delay(720000); /调用延迟函数,延迟10ms ,main.c文件的代码,5.3.2 GPIO标准外设库应用实例,5.3.2 GPIO标准外设库应用实例,5.3.3 基于标准外设库开发的一般流程,开启相应外设时钟,确定功能引脚,初始
13、化外设硬件,应用功能实现,若有中断,编写中断服务函数,开启相应外设时钟,配置外设功能参数,调用初始化函数,初始化外设相关的参数,使能相应的外设,5.4 GPIO模块的HAL库接口函数及应用,5.4.1 GPIO的HAL库接口函数,GPIO的HAL库接口函数的源码在源文件stm32f1xx_hal_gpio.c中,其对应的头文件stm32f1xx_hal_gpio.h声明了GPIO所有的库函数,共8种。,5.4.1 GPIO的HAL库接口函数,GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) GPIO_P
14、inState bitstatus; if (GPIOx-IDR ,读取输入数据寄存器IDR的值与指定引脚进行按位与操作,结果若不为0,则返回高电平;结果若为0,则返回低电平。,引脚功能操作函数,源码解析:,GPIOx为引脚的端口号,取值为GPIOAGPIOG,表示指向GPIO结构体的指针,用于访问端口引脚的寄存器。,5.4.1 GPIO的HAL库接口函数,GPIO_Pin为常量GPIO_Pin_0表示0 x0001;GPIO_Pin_15表示0 x8000。,GPIO_PinState表示引脚电平状态,为枚举变量,typedef enum GPIO_PIN_RESET = 0u, GPIO_
15、PIN_SET GPIO_PinState;取值范围为GPIO_PIN_SET =1 或者GPIO_PIN_RESET = 0。,5.4.1 GPIO的HAL库接口函数,void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState) if (PinState != GPIO_PIN_RESET) GPIOx-BSRR = GPIO_Pin; else GPIOx-BSRR = (uint32_t)GPIO_Pin 16U; ,将指定引脚的电平状态写入置位/复位寄存器BSRR中,该寄存器
16、为32位,其中高16位控制端口16个引脚(015)输出低电平,低16位控制端口16个引脚输出高电平。若设置的引脚电平状态不等于低电平,则将该引脚设置的状态位写入BSRR寄存器对应的低16位,否则,将该GPIO_Pin左移16位写入BSRR寄存器对应的高16位中。,函数源码,源码解析,5.4.1 GPIO的HAL库接口函数,置位/复位寄存器GPIOx_BSRR,GPIOx_BSRR寄存器的高16位称为清除寄存器,低16位称为置位寄存器。,对GPIOx_BSRR的低16位的某位置“1”,则对应的I/O端口引脚输出高电平“1”; 对GPIOx_BSRR的低16位的某位置“0”,则对应的I/O端口引脚
17、状态不变; 对GPIOx_BSRR的高16位的某位置“1”,则对应的I/O端口引脚输出低电平“0”; 对GPIOx_BSRR的高16位的某位置“0”,则对应的I/O端口引脚状态不变;,5.4.1 GPIO的HAL库接口函数,void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)if (GPIOx-ODR ,读出输出数据寄存器ODR的值与指定引脚进行按位与操作,结果若为真,表明原来为高电平,则写入BRR寄存器(BRR寄存器写入“1”有效,写入“0”不影响ODR的状态);若结果为假,表明原来为低电平,则控制BSRR寄存器低16
18、位部分做置位(置“1”)操作。,函数源码,源码解析:,5.4.1 GPIO的HAL库接口函数,数据输出寄存器GPIOx_ODR,GPIOx_ODR数据输出寄存器的高16位为保留位,没有用到;低16位对应I/O端口相应的引脚,可进行置位或复位操作。,5.4.1 GPIO的HAL库接口函数,端口位清除寄存器GPIOx_BRR,端口位清除寄存器GPIOx_BRR可以对端口数据输出寄存器GPIOx_ODR中的每位进行复位操作,即GPIOx_BRR只能改变引脚状态为低电平。对GPIOx_BRR的低16位的某位置“1”,则对应的I/O端口引脚置输出低电平“0”;对GPIOx_BRR的低16位的某位置“0”
19、,则对应的I/O端口引脚状态不变。,5.4.1 GPIO的HAL库接口函数,将PB5置为低电平,即将GPIOB_ODR寄存器的第5位ODR5置“0”(注:寄存器的位数为015),则可以有三种方式实现:,举例,操作GPIOx_BRR寄存器GPIOB-BRR = 0 x0020(0000 0000 0010 0000);,操作GPIOx_ODR寄存器GPIOB-ODR = 0 xffef(1111 1111 1101 1111);,方法一,操作GPIOx_BSRR寄存器GPIOB-BSRR = 0 x00200000(0000 0000 0010 0000 0000 0000 0000 0000)
20、;,方法二,方法三,5.4.1 GPIO的HAL库接口函数,采用基于HAL库设计方式,利用两个GPIO引脚输出高低电平控制发光二极管,并按一定时间间隔改变IO口电平,实现灯光闪烁效果。,功能,硬件设计,当引脚输出为低电平时,LED灯亮,当引脚输出为高电平时,LED灯灭。,5.4.2 GPIO的HAL库应用实例,基于HAL库的软件设计流程如图所示:建立STM32CubeMX工程;进行功能参数配置;生成工程代码;修改代码完成应用程序设计;下载到开发板测试。,5.4.2 应用实例基于HAL库实现LED闪烁,5.4.2 GPIO的HAL库应用实例,设计步骤新建STM32CubeMX工程,选择设计采用的
21、MCU,注意,所建工程文件名必须是英文名称,且必须是英文路径。,在D盘或其他盘符目录下新建一个文件夹,用来存放后面建立的STM32CubeMX工程。,设计步骤新建STM32CubeMX工程,选择设计采用的MCU,在主界面中通过单击“New Project”下“ACCESS TO MCU SELECTOR”按钮或通过菜单栏中的“File”“New Project”新建一个工程,打开STM32CubeMX软件,设计步骤新建STM32CubeMX工程,选择设计采用的MCU,选择所用MCU对应的内核,选择“ARM Cortex-M3”;在“Series”选项中选择对应的系列,如“SMT32F1”;在右
22、侧“MCUs/MPUs List”中找到该系列下所使用的微控制器芯片型号选中并单击对应芯片型号,在“MCUs/MPUs List”上方会显示该芯片对应的基本信息。,也可以通过在搜索栏内直接输入芯片型号采用搜索的方式来快速完成。,设计步骤STM32CubeMX功能参数配置,在New Project窗口完成MCU的相关设置后,双击所选择的具体芯片,进入STM32CubeMX的主界面,完成以下过程:,设计步骤STM32CubeMX功能参数配置( RCC配置),在“Categories”栏目中的“System Core”中,找到“RCC”选项,时钟信号选择HSE作为系统的外部时钟源,HSE选择“Cry
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通用 输入输出 GPIO 模块 课件
链接地址:https://www.31ppt.com/p-1488906.html