《第4章 stm32单片机通用输入输出GPIO.ppt》由会员分享,可在线阅读,更多相关《第4章 stm32单片机通用输入输出GPIO.ppt(50页珍藏版)》请在三一办公上搜索。
1、退出,嵌入式单片机原理及应用,电气工程学院仪器科学与工程系,1 ARM嵌入式系统概述2 STM32单片机结构和最小系统 3 基于标准外设库的C语言程序设计基础 4 STM32通用输入输出GPIO5 STM32外部中断6 STM32通用定时器7 STM32通用同步/异步收发器USART8 直接存储器存取DMA9 STM32的模数转换器ADC10 STM32的集成电路总线I2C11 STM32的串行外设接口SPI,第4章 STM32单片机通用输入输出GPIO,4.1 STM32F10 x的输入/输出基本结构4.2 GPIO相关功能寄存器4.3 STM32F10 x的IO口功能特点4.4 STM32
2、F10 x的输入输出配置4.5 GPIO应用设计,退出,STM32单片机 最多有7个16位的并行 I/O端口:PA、PB、PC、PD、PE、PF、PG。,STM32F103Cx、103Rx单片机 只有4个16位的并行 I/O端口:PA、PB、PC、PD。,STM32 I/O端口,4.1 STM32F10 x的输入/输出基本结构,STM32F103CBT6 包含4个端口:PA口、PB口、PC口、PD口,共有37个I/O管脚:PA口 16脚+PB口16脚+PC口3脚+PD口2脚。,STM32 引脚,STM32F103RBT6 包含4个端口:PA口、PB口、PC口、PD口,共有51个I/O管脚:PA
3、口 16脚+PB口16脚+PC口16脚+PD口3脚。,PA口 16脚,PB口16脚,PC口16脚,PD口3脚,STM32 引脚,4.1 STM32F10 x的输入/输出基本结构,4.2 GPIO相关功能寄存器,STM32F10 x处理器的每个GPIO端口都对应有:2个32位配置寄存器(GPIOx-CRL,GPIOx-CRH)2个32位数据寄存器(GPIOx-IDR,GPIOx-ODR)1个32位置位/复位寄存器(GPIOx-BSRR)1个16位复位寄存器(GPIOx-BRR)1个32位锁定寄存器(GPIOx-LCKR),在固件函数库的“stm32f10 x_map.h”文件中,对应的定义:,/
4、*-General Purpose IO-*/typedef struct vu32 CRL;/configuration register low(GPIOx_CRL)(x=AE)vu32 CRH;vu32 IDR;vu32 ODR;vu32 BSRR;vu32 BRR;vu32 LCKR;GPIO_TypeDef;/用结构体GPIO_TypeDef定义GPIOx端口,(即定义 GPIOx端口的7个设置寄存器)/*vu32=volatile unsigned long*/,编程时,GPIOx端口的具体配置是从GPIOA、GPIOB、GPIOC、GPIOD 或 GPIOE寄存器组开始。首先,在
5、固件库中,用结构体GPIO_TypeDef定义GPIOx端口,(即定义 GPIOx端口的7个设置寄存器):,端口配置低寄存器(GPIOx_CRL)(x=A.E):,表4-2:MODE1:0配置,表4-3:CNF1:0配置,4.3 STM32F10 x的IO口功能特点,根据IO端口的特定硬件特征,IO端口的每个引脚都可以由软件配置成多种工作模式。在运行程序之前必须对每个用到的引脚功能进行配置,如果某些引脚的复用功能没有使用,可以先配置为通用IO(GPIO)口。,4.3.1 通用功能输入输出GPIO,GPIO包括下面几种模式:输入浮空模式:复位期间和刚复位后,复用功能未开启,IO端口被配置成浮空输
6、入模式。输入上拉或下拉模式:复位后,JTAG引脚被置输入上拉或下拉模式:PA15:JTDI置于上拉模式;PA14:JTCK置于下拉模式;PA13:JTMS置于上拉模式;PB4:JNTRST置于上拉模式。输入数据寄存器(GPIOx-IDR)在每个APB2时钟周期捕捉IO引脚上的数据。所有GPIO引脚有一个内部上拉和下拉,当配置为输入时,它们可以被激活也可以被断开。输出推挽模式或开漏模式:当作为输出配置时,写到输出数据寄存器上的值(GPIOx-ODR)输出到相应的IO引脚。可以以推挽模式或开漏模式使用输出驱动器。,4.3.2 复用功能输入输出AFIO,STM32F10 x的AFIO包括默认复用功能
7、和重映射复用功能。默认复用功能引脚的默认复用功能是固定的,有复用输入、复用输出和双向复用,使用默认复用功能必须对相应引脚端口寄存器进行配置。复用输入功能:端口必须配置成输入模式(浮空、上拉或下拉)且输入引脚必须由外部驱动。复用输出功能:端口必须配置成复用功能输出模式(推挽或开漏)。双向复用功能:端口位必须配置复用功能输出模式(推挽或开漏)。这时,输入驱动器被配置成浮空输入模式。软件重新映射复用功能为了使不同器件封装的外设IO功能的数量达到最优,可以把一些复用功能重新映射到其它一些引脚上,这可以通过软件配置相应的寄存器来完成。,USART3_TX 的默认引出脚是 PB10,USART3_RX 的
8、默认引出脚是 PB11;重映射后,USART3_TX 的引出脚为 PD8,变更 USART3_RX 的引出脚为PD9,4.3.3 外部中断/唤醒线,所有端口都有外部中断能力,使用外部中断线,端口必须配置成输入模式。外部中断/事件控制器(EXTI)的主要特性:(1)每个中断/事件都有独立的触发和屏蔽(2)每个中断线都有专用的状态位(3)支持多达19个软件的中断/事件请求(4)检测脉冲宽度低于APB2时钟宽度的外部信号。,4.4 STM32F10 x的输入输出配置,GPIO端口位输入配置,4.4 STM32F10 x的输入输出配置,STM32单片机的IO引脚可以配置成下面8种模式:(1)浮空输入
9、_IN_FLOATING(2)带上拉输入 _IPU(3)带下拉输入 _IPD(4)模拟输入 _AIN(5)开漏输出 _OUT_OD(6)开漏复用输出 _AF_OD(7)推挽输出 _OUT_PP(8)推挽复用输出 _AF_PP,输入浮空模式,CPU通过内部的数据总线可以随时读出I/O 端口的电平变化的状态。,带上拉输入模式,与浮空输入模式相比,仅仅是在数据通道上面,接入了一个上拉电阻,带下拉输入模式,对于输入下拉模式的输入,是在数据通道的下部,接入了一个下拉电阻,为什么要接上拉和下拉电阻?,1)当单片机IO作为输入时,假设我们直接在IO端口接一个按键到地(或电源)。因为按键未按下时管脚是悬空的。
10、单片机就很难检测按键是否按下。所以人为的接一个上拉(或下拉)。以确定未按下的时候IO输入电平的状态。2)可以提高芯片的抗干扰能力。3)当单片机的IO口作输出时,如果不接上拉电阻只能提供灌电流。无法输出电流驱动外接设备。这时也需要考虑上拉电阻。这样才可以使IO输出高电平,模拟输入模式,数据通道中上拉、下拉电阻和施密特触发器,这时均处于关断的状态,在模拟输入状态下,CPU不能通过输入数据寄存器读到IO端口变化的数据,开漏输出模式,施密特触发器处于开启状态,CPU可以通过读输入数据寄存器的值来获取I/O端口的状态;通过这个特性,还可以实现了虚拟的I/O端口双向通信:假如CPU 输出逻辑“1”,由于编
11、号3 的N-MOS管处于关闭状态,I/O 端口的电平将完全由外部电路决定,因此,CPU 可以在“输入数据寄存器”读到外部电路的信号,而不是它自己输出的逻辑“1”,GPIO口的输出速度,GPIO口的输出模式下,有3 种输出速度可选(2MHz、10MHz和50MHz)这个速度是指GPIO口驱动电路的响应速度,而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在I/O口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路)。通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。高频的驱动电路,噪声很高,当我们的项目不需要比较高的输出频率时
12、,请选用低频驱动电路,这样非常有利于提高系统的EMI 性能。当然如果我们的项目要求输出较高频率的信号,但却选用了较低频率的驱动模块,很可能会得到比较失真的输出信号。,开漏复用输出模式,GPIO的开漏复用输出模式与开漏输出模式的工作原理基本相同,不同的是编号为2的输入的源不同,推挽输出模式,GPIO的推挽输出模式是在开漏输出模式的基础上,在“输出控制电路”之后,增加了一个P-MOS管,推挽复用输出模式,编号2“输出控制电路”输入是与复用功能的输出端相连,此时“输出数据寄存器”被从输出通道断开了,片上外设的输出信号直接与“输出控制电路”的输入端相连接,4.5 GPIO应用设计,4.5.1 GPIO
13、常用库函数4.5.2 GPIO使用流程4.5.3 GPIO应用实例,4.5.2 GPIO使用流程,(1)配置输入的时钟,完成初始化;(2)如果使用该外设的输入输出脚,则需要配置相应的 GPIO端口(3)对外设进行详细配置:(a)外设对应的管脚为输出:需要根据外围电路的配置选择对应的管脚为复用功能的推挽输出或复用功能的开漏输出。(b)外设对应的管脚为输入:则根据外围电路的配置可以选择浮空输入、带上拉输入或带下拉输入。(c)ADC对应的管脚:配置管脚为模拟输入。如果把端口配置成复用输出功能,则引脚和输出寄存器断开,并和片上外设的输出信号连接。将管脚配置成复用输出功能后,如果外设没有被激活,那么它的
14、输出将不确定。,4.5.3 GPIO应用实例,利用STM32F10 x的GPIO功能驱动LED闪烁。GPIO驱动LED电路原理图如图4-8所示,采用PD2,PA8连接LED。,将程序下载到开发板,可以看到LED1和LED2同时闪烁;也可以采用软件仿真验证PA8和PD2的输出。,SetBits,4.5.2 GPIO使用流程,void GPIO_Config(void)GPIO_InitTypeDef GPIO_InitStructure;/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOA,ENABLE);GPIO_I
15、nitStructure.GPIO_Pin=GPIO_Pin_2;/GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOD,步骤一:GPIO的配置,4.5.2 GPIO使用流程,使能GPIO的端口时钟,4.5.2 GPIO使用流程,使能GPIO的端口时钟,步骤一:GPIO的配置,RCC_APB2PeriphClockCmd()这个库函数有2个输入参数RCC_APB2Periph:由于挂接在APB2总线上的外设模块很多,该参数用以选择同
16、时开启一个外设或者多个外设NewState:ENABLE 或 DISABLE,“RCC_APB2Periph”值 可以取上表一个或者多个值的组合,RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOA,ENABLE);,步骤一:GPIO的配置,void GPIO_Config(void)GPIO_InitTypeDef GPIO_InitStructure;/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOA,ENABLE);GPIO_Init
17、Structure.GPIO_Pin=GPIO_Pin_2;/GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOD,步骤一:GPIO的配置,uint16_t GPIO_Pin:选择需要配置的GPIO模块的一个引脚或者多个引脚的组合这些宏的值,就是允许编程的时候给结构体成员GPIO_Pin赋的值。假如我们给GPIO_Pin赋值为宏GPIO_Pin_2的话,表示我们是选中的GPIO模块的第2个引脚,设置STM32单片机相应的寄存器,实现
18、对GPIO模块引脚的配置,步骤一:GPIO的配置,GPIOSpeed_TypeDef:GPIO模块响应速度在这个枚举类型中,定义了3个枚举常量,GPIO_Speed_10MHz=1,GPIO_Speed_2MHz=2GPIO_Speed_50MHz=3用于表示GPIO模块的引脚可以配置成的各个最高速度,GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz语句,是把GPIO模块的引脚配置为最高频率,设置为50MHz。,步骤一:GPIO的配置,GPIOMode_TypeDef:GPIO模块引脚模式,步骤一:GPIO的配置,void GPIO_Config(v
19、oid)GPIO_InitTypeDef GPIO_InitStructure;/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;/GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOD,库函数控制IO输出高电平或者低电平,库函数控制IO输出高电平或者低电平,IO口输出高电平IO口输出低电平,库函数控制IO输出高电平或者低电平,int main(void)GPIO_Config();while(1)GPIO_ResetBits(GPIOA,GPIO_Pin_8);GPIO_ResetBits(GPIOD,GPIO_Pin_2);delay();GPIO_SetBits(GPIOA,GPIO_Pin_8);GPIO_SetBits(GPIOD,GPIO_Pin_2);delay();void delay(void)int i=0 xffffff;while(i-);,PA8和PD2输出仿真图,可以看到PA8和PD2出现间隔的高低电平。,
链接地址:https://www.31ppt.com/p-2217046.html