基于ARM的微机原理与接口技术_第1页
基于ARM的微机原理与接口技术_第2页
基于ARM的微机原理与接口技术_第3页
基于ARM的微机原理与接口技术_第4页
基于ARM的微机原理与接口技术_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于ARM的微机原理与接口技术1第6章 通用输入输出接口本章学习目标熟悉STM32F103VET6微控制器的通用输入输出接口(General-Purpose Input/Output,GPIO)的工作模式和结构掌握STM32F103VET6的GPIO的使用方法26.1 通用输入输出接口概述 STM32F1单片机 最多有7个16位的并行 I/O端口:PA、PB、PC、PD、PE、PF、PG。特点:1、多功能双向能承受5V电压的快速IO口线。2、每16根口线分为一组,分别为PA、PB、PC。3、每个GPIO端口有:两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器

2、(GPIOx_IDR和GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。3 GPIO端口的每个位可以由软件分别配置成以下模式:1、输入浮空 2、输入上拉3、输入下拉4、模拟输入 5、开漏输出6、推挽式输出7、推挽式复用功能8、开漏复用功能4 I/O口位的基本结构51、普通I/O功能复位期间和刚复位后,复用功能未开启,I/O端口被配置成浮空输入模式。输入数据寄存器(GPIOx_IDR)在每个APB2时钟周期捕捉I/O引脚上的数据。当作为输出配置时,写到输出数据寄存器(GPIOx_OD

3、R)上的值输出到相应的I/O引脚。可以以推挽模式或开漏模式(当输出0时,只有N-MOS被打开)使用输出驱动器。所有GPIO引脚有一个内部弱上拉和弱下拉,当配置为输入时,它们可以被激活也可以被断开。6.2 GPIO的功能62、单独的位设置或位清除当对GPIOx_ODR的个别位编程时,软件不需要禁止中断:在单次APB2写操作里,可以只更改一个或多个位。3、外部中断/唤醒线所有端口都有外部中断能力。为了使用外部中断线,端口必须配置成输入模式。6.2 GPIO的功能74、复用功能(AF)使用默认复用功能前必须对端口位配置寄存器编程。对于复用输入功能,端口必须配置成输入模式(浮空、上拉或下拉)且输入引脚

4、必须由外部驱动。对于复用输出功能,端口必须配置成复用功能输出模式(推挽或开漏)。对于双向复用功能,端口位必须配置复用功能输出模式(推挽或开漏)。此时,输入驱动器被配置成浮空输入模式。6.2 GPIO的功能85、软件重新映射I/O复用功能为了使不同封装器件的外设I/O功能的数量达到最优,可以把一些复用功能重新映射到其他一些引脚上。6、GPIO锁定机制锁定机制允许冻结IO配置。6.2 GPIO的功能97、输入配置6.2 GPIO的功能根据输入配置(上拉,下拉或浮空)的不同,弱上拉和下拉电阻被连接在每个APB2时钟周期,出现在I/O脚上的数据被采样到输入数据寄存器输出缓冲器被禁止10I/O端口位的高

5、阻抗模拟输入配置输出缓冲器被禁止禁止施密特触发输入。施密特触发输出值被强置为0弱上拉和下拉电阻被禁止读取输入数据寄存器时数值为0118、输出配置6.2 GPIO的功能121) I/O端口位的开漏输出配置开漏模式: P-MOS从不被激活,仅N-MOS工作。开漏模式:输出寄存器上的0激活N-MOS,输出低电平;而输出寄存器上的1将端口置于高阻状态(P-MOS从不被激活)。激活施密特触发输入在每个APB2时钟周期,出现在I/O脚上的数据被采样到输入数据寄存器132) I/O端口位的推挽输出配置推挽模式:输出寄存器上的0激活N-MOS,而输出寄存器上的1将激活P-MOS。激活施密特触发输入弱上拉和下拉

6、电阻被禁止在每个APB2时钟周期,出现在I/O脚上的数据被采样到输入数据寄存器149、复用功能配置弱上拉和下拉电阻被禁止在每个APB2时钟周期,出现在I/O脚上的数据被采样到输入数据寄存器1510、模拟输入配置6.2 GPIO的功能166.3 GPIO的寄存器每个GPIOx端口有7个设置寄存器:两个32位的配置寄存器(GPIOx_CRL, GPIOx_CRH)(GPIOx_CRL) (x=A.G): 端口配置低寄存器,用于配置GPIOx端口的第0位第7位;端口配置高寄存器,用于配置GPIOx端口的第8位第15位。两个32位的数据寄存器(GPIOx_IDR,GPIOx_ODR)(GPIOx_ID

7、R) (x=A.G): GPIOx 输入数据寄存器(GPIOx_ODR) (x=A.G): GPIOx 输出数据寄存器一个32位的置位/复位寄存器 (GPIOx_BSRR) (x=A.G)一个16位的复位寄存器(GPIOx_BRR)一个32位的锁定寄存器(GPIOx_LCKR) (x=A.G) 每个寄存器的介绍请参见教材17在MCS-51单片机中,每个IO端口:只有1个设置寄存器P0端口:P0端口寄存器-P0,P1端口:P1端口寄存器-P1,P2端口:P2端口寄存器-P2,P3端口:P3端口寄存器-P3。对应STM32单片机的数据寄存器MCS-51单片机I0端口的输入、输出数据寄存器共用1个寄

8、存器Px,而STM32单片机的输入、输出数据寄存器是分开的。两个32位的数据寄存器(GPIOx_IDR,GPIOx_ODR)(x=A.G)186.4 RCC时钟模块的寄存器要使用某个外设,必须使能该外设的时钟。时钟配置需要先考虑系统时钟的来源(内部时钟、外部时钟、外部振荡器),并且是否需要锁相环(PLL)。然后再考虑内部总线和外部总线,最后考虑外设的时钟信号。应遵从先倍频作为处理器的时钟,然后再由内向外分频的原则。196.4 RCC时钟模块的寄存器流程:20STM32单片机的复位和时钟设置 :共包括10个设置寄存器一个32位的时钟控制寄存器(RCC_CR)一个32位的时钟配置寄存器(RCC_C

9、FGR)一个32位的时钟中断寄存器 (RCC_CIR)一个32位的APB2外设复位寄存器 (RCC_APB2RSTR)一个32位的APB1外设复位寄存器 (RCC_APB1RSTR) 一个32位的AHB外设时钟使能寄存器 (RCC_AHBENR) 一个32位的APB2外设时钟使能寄存器(RCC_APB2ENR) 一个32位的APB1外设时钟使能寄存器(RCC_APB1ENR) 一个32位的备份域控制寄存器 (RCC_BDCR) 一个32位的控制/状态寄存器 (RCC_CSR) 每个寄存器的介绍详见教材21编程时,时钟的具体配置是从RCC(Reset and Clock Configuratio

10、n,复位和时钟配置)寄存器组开始。在固件库中,用结构体RCC_TypeDef 定义 RCC寄存器组。在文件“stm32f10 x.h”中,定义如下:typedef struct _IO uint32_t CR; _IO uint32_t CFGR; _IO uint32_t CIR; _IO uint32_t APB2RSTR; _IO uint32_t APB1RSTR; _IO uint32_t AHBENR; _IO uint32_t APB2ENR; _IO uint32_t APB1ENR; _IO uint32_t BDCR; _IO uint32_t CSR;/*其他内容*/ R

11、CC_TypeDef;1、RCC复位和时钟配置寄存器组22#define PERIPH_BASE (uint32_t)0 x40000000) /*! Peripheral base address in the alias region */*!0时参照表180或1开漏10或1复用功能输出推挽10任意开漏1任意输入模拟输入0000任意输入浮空1任意输入下拉100输入上拉1MODE模式位MODE1:0含义00输入01最大输出速率10MHz10最大输出速率2MHz11最大输出速率50MHz37#define GPIOA_BASE (APB2PERIPH_BASE + 0 x0800)#defin

12、e GPIOB_BASE (APB2PERIPH_BASE + 0 x0C00)#define GPIOC_BASE (APB2PERIPH_BASE + 0 x1000)#define GPIOD_BASE (APB2PERIPH_BASE + 0 x1400)#define GPIOE_BASE (APB2PERIPH_BASE + 0 x1800)#define GPIOF_BASE (APB2PERIPH_BASE + 0 x1C00)#define GPIOG_BASE (APB2PERIPH_BASE + 0 x2000)在文件stm32f01x.h中定义/* Peripheral

13、 base address in the bit-band region */#define PERIPH_BASE (u32)0 x40000000)/* Peripheral memory map */#define APB1PERIPH_BASE PERIPH_BASE#define APB2PERIPH_BASE (PERIPH_BASE + 0 x10000)#define AHBPERIPH_BASE (PERIPH_BASE + 0 x20000)0 x400110000 x400108000 x40010C000 x400114000 x400118000 x40011C000

14、 x4001200038#define GPIOA (GPIO_TypeDef *) GPIOA_BASE)#define GPIOB (GPIO_TypeDef *) GPIOB_BASE)#define GPIOC (GPIO_TypeDef *) GPIOC_BASE)#define GPIOD (GPIO_TypeDef *) GPIOD_BASE)#define GPIOE (GPIO_TypeDef *) GPIOE_BASE)#define GPIOF (GPIO_TypeDef *) GPIOF_BASE)#define GPIOG (GPIO_TypeDef *) GPIOG

15、_BASE)39在文件“stm32f10 x_gpio.h”中,定义2) GPIO_Pin_x管脚定义: /* Exported constants -*/* GPIO pins define -*/#define GPIO_Pin_0 (u16)0 x0001) /* Pin 0 selected */#define GPIO_Pin_1 (u16)0 x0002) /* Pin 1 selected */#define GPIO_Pin_2 (u16)0 x0004) /* Pin 2 selected */#define GPIO_Pin_3 (u16)0 x0008) /* Pin 3

16、 selected */#define GPIO_Pin_4 (u16)0 x0010) /* Pin 4 selected */#define GPIO_Pin_5 (u16)0 x0020) /* Pin 5 selected */#define GPIO_Pin_6 (u16)0 x0040) /* Pin 6 selected */#define GPIO_Pin_7 (u16)0 x0080) /* Pin 7 selected */#define GPIO_Pin_8 (u16)0 x0100) /* Pin 8 selected */#define GPIO_Pin_9 (u16

17、)0 x0200) /* Pin 9 selected */#define GPIO_Pin_10 (u16)0 x0400) /* Pin 10 selected */#define GPIO_Pin_11 (u16)0 x0800) /* Pin 11 selected */#define GPIO_Pin_12 (u16)0 x1000) /* Pin 12 selected */#define GPIO_Pin_13 (u16)0 x2000) /* Pin 13 selected */#define GPIO_Pin_14 (u16)0 x4000) /* Pin 14 select

18、ed */#define GPIO_Pin_15 (u16)0 x8000) /* Pin 15 selected */#define GPIO_Pin_All (u16)0 xFFFF) /* All pins selected */使用按位或运算符“|”可以一次选中多个管脚。可以使用上表中的任意组合。403)GPIO_InitTypeDef 初始化端口参数 定义(1) 枚举类型GPIOSpeed_TypeDef:用于定义GPIO管脚 的 响应速度 (2) 枚举类型GPIOMode_TypeDef: 用于定义GPIO管脚 的 工作模式(3) 结构体GPIO_InitTypeDef: 用于初始

19、化端口参数 难点41在文件“stm32f10 x_gpio.h”中,定义:typedef enum GPIO_Speed_10MHz = 1, GPIO_Speed_2MHz, GPIO_Speed_50MHzGPIOSpeed_TypeDef; /定义GPIO管脚 的 响应速度 (1) 枚举类型GPIOSpeed_TypeDef:用于定义GPIO管脚 的 响应速度 42STM32单片机的每一个输入/输出引脚(即GPIO端口的每一位)可以配置成以下8种模式(4输入+2输出+2复用输出): (2)STM32单片机的GPIO端口模式: 输入浮空:IN_FLOATING输入上拉:IPU(In Pus

20、h-Up)输入下拉: IPD(In Push-Down)模拟输入: AIN (Analog In) 开漏输出:Out_OD (Open Drain Output)推挽式输出:Out_PP (Push-Pull Output)推挽式复用功能:AF_PP (Push-Pull Output Alternate-Function)开漏复用功能:AF_OD (Open Drain Output Alternate-Function)输 入输 出复用输 出43枚举类型GPIOMode_TypeDef: 用于定义GPIO管脚 的 工作模式/* Configuration Mode enumeration -*/typedef enum GPIO_Mode_AIN = 0 x0, GPIO_Mode_IN_FLOATING = 0 x04, GPIO_Mode_IPD = 0 x28, GPIO_Mode_IPU = 0 x48, GPIO_Mode_Out_O

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论