第8讲 gpio原理与配置方法讲义

上传人:今*** 文档编号:108188138 上传时间:2019-10-22 格式:PPT 页数:29 大小:3.56MB
返回 下载 相关 举报
第8讲 gpio原理与配置方法讲义_第1页
第1页 / 共29页
第8讲 gpio原理与配置方法讲义_第2页
第2页 / 共29页
第8讲 gpio原理与配置方法讲义_第3页
第3页 / 共29页
第8讲 gpio原理与配置方法讲义_第4页
第4页 / 共29页
第8讲 gpio原理与配置方法讲义_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《第8讲 gpio原理与配置方法讲义》由会员分享,可在线阅读,更多相关《第8讲 gpio原理与配置方法讲义(29页珍藏版)》请在金锄头文库上搜索。

1、第 8 讲 GPIO原理与配置方法,ALIENTEK,广州星翼电子 官方淘宝店: 技术支持论坛:,原子教你玩STM32系列视频,技术支持论坛: 开源电子网 官方微博: “正点原子” 微博网址 淘宝店铺: ,GPIO 8种模式 3个最大输出速度,广州星翼电子 官方淘宝店: 技术支持论坛:,ALIENTEK,原子教你玩STM32系列视频,-输入浮空 -输入下拉 -输入上拉 -模拟输入 -开漏输出 -推挽式输出 -推挽式复用功能 -开漏复用功能,-2MHz -10MHz -50MHz,GPIO基本结构,广州星翼电子 官方淘宝店: 技术支持论坛:,ALIENTEK,原子教你玩STM32系列视频,GPI

2、O 输入输出配置相关寄存器 寄存器配置在STM32中文参考手册V10的8.2节有详细讲解,广州星翼电子 官方淘宝店: 技术支持论坛:,ALIENTEK,原子教你玩STM32系列视频,- GPIOx_CRL :端口配置低寄存器 - GPIOx_CRH:端口配置高寄存器 - GPIOx_IDR:端口输入寄存器 - GPIOx_ODR:端口输出寄存器 - GPIOx_BSRR:端口位设置/清除寄存器 - GPIOx_BRR :端口位清除寄存器 - GPIOx_LCKR:端口配置锁存寄存器,广州星翼电子 官方淘宝店: 技术支持论坛:,ALIENTEK,原子教你玩STM32系列视频,广州星翼电子 官方淘

3、宝店: 技术支持论坛:,ALIENTEK,原子教你玩STM32系列视频,广州星翼电子 官方淘宝店: 技术支持论坛:,ALIENTEK,原子教你玩STM32系列视频,广州星翼电子 官方淘宝店: 技术支持论坛:,ALIENTEK,原子教你玩STM32系列视频,广州星翼电子 官方淘宝店: 技术支持论坛:,ALIENTEK,原子教你玩STM32系列视频,广州星翼电子 官方淘宝店: 技术支持论坛:,ALIENTEK,原子教你玩STM32系列视频,广州星翼电子 官方淘宝店: 技术支持论坛:,ALIENTEK,原子教你玩STM32系列视频,通过跑马灯实例测试寄存器用法!,广州星翼电子 官方淘宝店: 技术支持

4、论坛:,ALIENTEK,原子教你玩STM32系列视频,跑马灯硬件连接,广州星翼电子 官方淘宝店: 技术支持论坛:,ALIENTEK,原子教你玩STM32系列视频,寄存器配置方式改写工程模板代码:,int main(void) delay_init(); RCC-APB2ENR|=1APB2ENR|=1CRL ,所有GPIO都挂载在APB2下面,广州星翼电子 官方淘宝店: 技术支持论坛:,ALIENTEK,原子教你玩STM32系列视频,函数分布文件: - stm32f10x_gpio.c -stm32f10x_gpio.h,GPIO库函数配置方法,GPIO输入输出配置重要函数: void GP

5、IO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx); uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); uint16_t GPIO_ReadOutputData(GPIO_TypeDef*

6、 GPIOx); void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal); void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal); void GPIO_PinLockConfig(GPIO_TypeDef*

7、 GPIOx, uint16_t GPIO_Pin);,广州星翼电子 官方淘宝店: 技术支持论坛:,ALIENTEK,原子教你玩STM32系列视频,函数原型: void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); 作用: 初始化GPIO的模式和速度,也就是设置相应的GPIO寄存器的CRH和CRL值。 第一个输入参数是GPIO_TypeDef类型指针变量,确定是哪个GPIO,取值范围: GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG 第二个参数是GPIO_In

8、itTypeDef类型指针变量,确定GPIOx的对应的引脚以及引脚 的模式和输出最大速度。 typedef struct uint16_t GPIO_Pin; GPIOSpeed_TypeDef GPIO_Speed; GPIOMode_TypeDef GPIO_Mode; GPIO_InitTypeDef;,GPIO_Init()函数:,广州星翼电子 官方淘宝店: 技术支持论坛:,ALIENTEK,原子教你玩STM32系列视频,1)第一个参数GPIO_Pin确定初始化那些管脚,取值范围为: GPIO_Pin_0 GPIO_Pin_15以及GPIO_Pin_All 2)第二个参数GPIO_Sp

9、eed确定初始化的IO的最大输出速度,其取值范围为枚举类型GPIOSpeed_TypeDef 的枚举值: typedef enum GPIO_Speed_10MHz = 1, GPIO_Speed_2MHz, GPIO_Speed_50MHz GPIOSpeed_TypeDef; 3)第三个参数GPIO_Mode;确定初始化的IO的输入输出模式,其取值范围为枚举类型 GPIOMode_TypeDef的枚举值: typedef enum GPIO_Mode_AIN = 0x0, /模拟输入 GPIO_Mode_IN_FLOATING = 0x04, /浮空输入 GPIO_Mode_IPD = 0

10、x28, /下拉输入 GPIO_Mode_IPU = 0x48, /上拉输入 GPIO_Mode_Out_OD = 0x14, /开漏输出 GPIO_Mode_Out_PP = 0x10, /通用推挽输出 GPIO_Mode_AF_OD = 0x1C, /复用开漏输出 GPIO_Mode_AF_PP = 0x18 /复用推挽 GPIOMode_TypeDef;,广州星翼电子 官方淘宝店: 技术支持论坛:,ALIENTEK,原子教你玩STM32系列视频,函数使用范例: GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin

11、 = GPIO_Pin_5; /PB.5 端口配置 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /速度50MHz GPIO_Init(GPIOB, /根据设定参数配置GPIOB.5,广州星翼电子 官方淘宝店: 技术支持论坛:,ALIENTEK,原子教你玩STM32系列视频,函数原型: uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 作用:

12、 读取对应的GPIO的输入值。也就是读取IDR寄存器的值。 使用范例: GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_5);/读取GPIOE.5管脚的输入值,函数 GPIO_ReadInputDataBit():,函数原型: uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx); 函数GPIO_ReadInputData()和GPIO_ReadInputDataBit()作用类似,不同的是GPIO_ReadInputData()用来读取一组(GPIOAGPIOG)所有IO口(16个)的输入值。 范例:GPIO_ReadI

13、nputData(GPIOE);/读取GPIOE所有IO输入值,函数 GPIO_ReadInputData():,广州星翼电子 官方淘宝店: 技术支持论坛:,ALIENTEK,原子教你玩STM32系列视频,读取IO口输出值,也就是读取寄存器ODR的值。 范例:GPIO_ReadOutputDataBit(GPIOE, GPIO_Pin_5); /读取GPIOE.5的输出值 GPIO_ReadOutputData(GPIOE); /读取GPIOE所有IO输出值,函数GPIO_ReadOutputDataBit() & GPIO_ReadOutputData(),设置IO输出高或者低,也就是设置寄

14、存器BSRR,BRR的值 范例: GPIO_SetBits(GPIOE,GPIO_Pin_5) /GPIOE.5输出高 GPIO_ResetBits(GPIOE,GPIO_Pin_5);/GPIOE.5输出低,函数GPIO_SetBits() & GPIO_ResetBits(),广州星翼电子 官方淘宝店: 技术支持论坛:,ALIENTEK,原子教你玩STM32系列视频,库函数实现实验1跑马灯实例:,int main(void) GPIO_InitTypeDef GPIO_InitStructure; delay_init(); RCC_APB2PeriphClockCmd(RCC_APB2P

15、eriph_GPIOB| RCC_APB2Periph_GPIOE, ENABLE); /使能PB,PE端口时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; /LED0PB.5 端口配置 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /IO口速度为50MHz GPIO_Init(GPIOB, ,广州星翼电子 官方淘宝店: 技术支持论坛:,ALIENTEK,原子教你玩STM32系列视频,看看我们

16、“实验1跑马灯-库函数操作 的源码”是怎么实现的?,STM32位带操作,广州星翼电子 官方淘宝店: 技术支持论坛:,ALIENTEK,原子教你玩STM32系列视频,就是把每个比特膨胀为一个32位的字,当访问这些字的时候就达到了访问比特的目的,比如说BSRR寄存器有32个位,那么可以映射到32个地址上,我们去访问(读-改-写)这32个地址就达到访问32个比特的目的。,广州星翼电子 官方淘宝店: 技术支持论坛:,ALIENTEK,原子教你玩STM32系列视频,在 CM3 支持的位带中,有两个区中实现了位带。 其中一个是 SRAM 区的最低 1MB 范围,0x20000000 0x200FFFFF (SRAM 区中的最低 1MB); 第二个则是片内外设区的最低 1MB范围, 0x4

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号