GPIO原理与配置方法.ppt

上传人:牧羊曲112 文档编号:6506628 上传时间:2023-11-07 格式:PPT 页数:29 大小:2.77MB
返回 下载 相关 举报
GPIO原理与配置方法.ppt_第1页
第1页 / 共29页
GPIO原理与配置方法.ppt_第2页
第2页 / 共29页
GPIO原理与配置方法.ppt_第3页
第3页 / 共29页
GPIO原理与配置方法.ppt_第4页
第4页 / 共29页
GPIO原理与配置方法.ppt_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《GPIO原理与配置方法.ppt》由会员分享,可在线阅读,更多相关《GPIO原理与配置方法.ppt(29页珍藏版)》请在三一办公上搜索。

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

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

3、官方淘宝店:http:/技术支持论坛:,ALIENTEK,原子教你玩STM32系列视频,广州星翼电子 官方淘宝店:http:/技术支持论坛:,ALIENTEK,原子教你玩STM32系列视频,广州星翼电子 官方淘宝店:http:/技术支持论坛:,ALIENTEK,原子教你玩STM32系列视频,广州星翼电子 官方淘宝店:http:/技术支持论坛:,ALIENTEK,原子教你玩STM32系列视频,广州星翼电子 官方淘宝店:http:/技术支持论坛:,ALIENTEK,原子教你玩STM32系列视频,广州星翼电子 官方淘宝店:http:/技术支持论坛:,ALIENTEK,原子教你玩STM32系列视频,通

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

5、x_gpio.h,GPIO库函数配置方法,GPIO输入输出配置重要函数:void GPIO_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 GP

6、IO_ReadOutputData(GPIO_TypeDef*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_PinLockConf

7、ig(GPIO_TypeDef*GPIOx,uint16_t GPIO_Pin);,广州星翼电子 官方淘宝店:http:/技术支持论坛:,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 第二个参数是GP

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

9、O_Speed确定初始化的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=0 x0,/模拟输入 GPIO_Mode_IN_FLOATING=0 x04,/浮空输入 GPIO_Mode_IPD=0 x28,/下拉输

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

11、5 端口配置 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;/推挽输出 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;/速度50MHz GPIO_Init(GPIOB,/根据设定参数配置GPIOB.5,广州星翼电子 官方淘宝店:http:/技术支持论坛:,ALIENTEK,原子教你玩STM32系列视频,函数原型:uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef*GPIOx,uint16_t GPIO_Pin);作用:读取对应的GPIO的输入值。也就是读取IDR寄存器

12、的值。使用范例: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_ReadInputData(GPIOE);/读取GPIOE所有IO输入值,函

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

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

15、LE);/使能PB,PE端口时钟 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;/LED0-PB.5 端口配置 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;/推挽输出 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;/IO口速度为50MHz GPIO_Init(GPIOB,广州星翼电子 官方淘宝店:http:/技术支持论坛:,ALIENTEK,原子教你玩STM32系列视频,看看我们“实验1跑马灯-库函数操作 的源码”是怎么实现的?,STM32位带操作,广州星翼电子 官方

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

17、围,0 x40000000 0 x400FFFFF(片上外设区中的最低 1MB)。位带区:支持位带操作的地址区 位带别名:对别名地址的访问最终作用到位带区的访问上(注意:这中间有一个地址映射过程)映射关系式:,广州星翼电子 官方淘宝店:http:/技术支持论坛:,ALIENTEK,原子教你玩STM32系列视频,#define BITBAND(addr,bitnum)(addr&0 xF0000000)+0 x2000000+(addr&0 xFFFFF)5)+(bitnum2)#define MEM_ADDR(addr)*(volatile unsigned long*)(addr)#defi

18、ne BIT_ADDR(addr,bitnum)MEM_ADDR(BITBAND(addr,bitnum)/IO口地址映射#define GPIOA_ODR_Addr(GPIOA_BASE+12)/0 x4001080C#define GPIOB_ODR_Addr(GPIOB_BASE+12)/0 x40010C0C#define GPIOF_ODR_Addr(GPIOF_BASE+12)/0 x40011A0C#define GPIOG_ODR_Addr(GPIOG_BASE+12)/0 x40011E0C#define GPIOA_IDR_Addr(GPIOA_BASE+8)/0 x400

19、10808#define GPIOB_IDR_Addr(GPIOB_BASE+8)/0 x40010C08#define GPIOG_IDR_Addr(GPIOG_BASE+8)/0 x40011E08/IO口操作,只对单一的IO口!/确保n的值小于16!#define PAout(n)BIT_ADDR(GPIOA_ODR_Addr,n)/输出#define PAin(n)BIT_ADDR(GPIOA_IDR_Addr,n)/输入#define PBout(n)BIT_ADDR(GPIOB_ODR_Addr,n)/输出#define PBin(n)BIT_ADDR(GPIOB_IDR_Addr

20、,n)/输入#define PFout(n)BIT_ADDR(GPIOF_ODR_Addr,n)/输出#define PFin(n)BIT_ADDR(GPIOF_IDR_Addr,n)/输入#define PGout(n)BIT_ADDR(GPIOG_ODR_Addr,n)/输出#define PGin(n)BIT_ADDR(GPIOG_IDR_Addr,n)/输入,sys.h里面对GPIO输入输出部分功能实现了位带操作:,广州星翼电子 官方淘宝店:http:/技术支持论坛:,ALIENTEK,原子教你玩STM32系列视频,实验2蜂鸣器实例硬件连接图:,BEEP管脚输出0,三极管不导通,蜂鸣器

21、关闭 BEEP管脚输出1,三极管导通,蜂鸣器鸣叫。,广州星翼电子 官方淘宝店:http:/技术支持论坛:,ALIENTEK,原子教你玩STM32系列视频,库函数实现实验2蜂鸣器实例:,int main(void)GPIO_InitTypeDef GPIO_InitStructure;delay_init();RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);/使能GPIOB端口时钟 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;/BEEP-PB.8 端口配置 GPIO_InitStructure.GPIO_M

22、ode=GPIO_Mode_Out_PP;/推挽输出 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;/速度为50MHz GPIO_Init(GPIOB,广州星翼电子 官方淘宝店:http:/技术支持论坛:,ALIENTEK,原子教你玩STM32系列视频,实验3按键输入实例:,#ifndef _KEY_H#define _KEY_H#include sys.h“#define KEY0 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)/读取按键0#define KEY1 GPIO_ReadInputDataBit(GP

23、IOE,GPIO_Pin_3)/读取按键1#define KEY2 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)/读取按键2#define KEY3 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)/读取按键3(WK_UP)#define KEY_UP 4#define KEY_LEFT3#define KEY_DOWN2#define KEY_RIGHT1void KEY_Init(void);/IO初始化u8 KEY_Scan(u8);/按键扫描函数#endif,key.h,广州星翼电子 官方淘宝店:http:/技术支持论坛:

24、,ALIENTEK,原子教你玩STM32系列视频,void KEY_Init(void)/IO初始化 GPIO_InitTypeDef GPIO_InitStructure;/初始化KEY0-GPIOA.13,KEY1-GPIOA.15 上拉输入 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE);/使能时钟 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;/PE24 GPIO_InitStructure.GPIO_Mode=G

25、PIO_Mode_IPU;/设置成上拉输入 GPIO_Init(GPIOE,/无按键按下,key.c,广州星翼电子 官方淘宝店:http:/技术支持论坛:,ALIENTEK,原子教你玩STM32系列视频,int main(void)u8 t;delay_init();/延时函数初始化 LED_Init();/LED端口初始化 KEY_Init();/初始化与按键连接的硬件接口 BEEP_Init();/初始化蜂鸣器端口 LED0=0;/先点亮红灯 while(1)t=KEY_Scan(0);/得到键值 if(t)switch(t)case KEY_UP:/控制蜂鸣器 BEEP=!BEEP;break;case KEY_LEFT:/控制LED0翻转 LED0=!LED0;break;case KEY_DOWN:/控制LED1翻转 LED1=!LED1;break;case KEY_RIGHT:/同时控制LED0,LED1翻转 LED0=!LED0;LED1=!LED1;break;else delay_ms(10);,main.c,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号