《第8讲 GPIO原理与配置方法.ppt》由会员分享,可在线阅读,更多相关《第8讲 GPIO原理与配置方法.ppt(29页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第 8 讲 GPIO原理与配置方法STM32 GPIOSTM32 GPIO相关寄存器相关寄存器1STM32STM32 GPIOGPIO固件库函数配置方法固件库函数配置方法2实例讲解实例讲解:跑马灯,按键,蜂鸣器跑马灯,按键,蜂鸣器3广州星翼电子广州星翼电子 官方淘宝店官方淘宝店:http:/http:/ 技术支持论坛技术支持论坛:原子教你玩原子教你玩STM32STM32系列视频系列视频技术支持论坛技术支持论坛:开源电子网开源电子网 官方微博官方微博:“正点原子正点原子”微博网址微博网址 http:/ GPIO 8GPIO 8种模式种模式3 3个最大输出速度个最大输出速度广州星翼电子广州星翼电子
2、 官方淘宝店官方淘宝店:http:/http:/ 技术支持论坛技术支持论坛:原子教你玩原子教你玩STM32STM32系列视频系列视频 -输入浮空 -输入下拉 -输入上拉 -模拟输入 -开漏输出 -推挽式输出 -推挽式复用功能 -开漏复用功能 2MHz 10MHz 50MHzGPIOGPIO基本结构基本结构广州星翼电子广州星翼电子 官方淘宝店官方淘宝店:http:/http:/ 技术支持论坛技术支持论坛:原子教你玩原子教你玩STM32STM32系列视频系列视频GPIO 输入输出配置相关寄存器输入输出配置相关寄存器 l 寄存器配置在STM32中文参考手册V10的8.2节有详细讲解广州星翼电子广州星
3、翼电子 官方淘宝店官方淘宝店:http:/http:/ 技术支持论坛技术支持论坛:原子教你玩原子教你玩STM32STM32系列视频系列视频 GPIOx_CRL:端口配置低寄存器 GPIOx_CRH:端口配置高寄存器 GPIOx_IDR:端口输入寄存器 GPIOx_ODR:端口输出寄存器 GPIOx_BSRR:端口位设置/清除寄存器 GPIOx_BRR:端口位清除寄存器 GPIOx_LCKR:端口配置锁存寄存器广州星翼电子广州星翼电子 官方淘宝店官方淘宝店:http:/http:/ 技术支持论坛技术支持论坛:原子教你玩原子教你玩STM32STM32系列视频系列视频广州星翼电子广州星翼电子 官方淘
4、宝店官方淘宝店:http:/http:/ 技术支持论坛技术支持论坛:原子教你玩原子教你玩STM32STM32系列视频系列视频广州星翼电子广州星翼电子 官方淘宝店官方淘宝店:http:/http:/ 技术支持论坛技术支持论坛:原子教你玩原子教你玩STM32STM32系列视频系列视频广州星翼电子广州星翼电子 官方淘宝店官方淘宝店:http:/http:/ 技术支持论坛技术支持论坛:原子教你玩原子教你玩STM32STM32系列视频系列视频广州星翼电子广州星翼电子 官方淘宝店官方淘宝店:http:/http:/ 技术支持论坛技术支持论坛:原子教你玩原子教你玩STM32STM32系列视频系列视频广州星翼
5、电子广州星翼电子 官方淘宝店官方淘宝店:http:/http:/ 技术支持论坛技术支持论坛:原子教你玩原子教你玩STM32STM32系列视频系列视频广州星翼电子广州星翼电子 官方淘宝店官方淘宝店:http:/http:/ 技术支持论坛技术支持论坛:原子教你玩原子教你玩STM32STM32系列视频系列视频 通过跑马灯实例测试寄存器用法!广州星翼电子广州星翼电子 官方淘宝店官方淘宝店:http:/http:/ 技术支持论坛技术支持论坛:原子教你玩原子教你玩STM32STM32系列视频系列视频跑马灯硬件连接跑马灯硬件连接广州星翼电子广州星翼电子 官方淘宝店官方淘宝店:http:/http:/ 技术支
6、持论坛技术支持论坛:原子教你玩原子教你玩STM32STM32系列视频系列视频寄存器配置方式改写工程模板代码:寄存器配置方式改写工程模板代码:int main(void)delay_init();RCCAPB2ENR|=1APB2ENR|=1CRL&=0XFF0FFFFF;GPIOBCRL|=0X00300000;/PB.5 推挽输出 GPIOBODR|=1CRL&=0XFF0FFFFF;GPIOECRL|=0X00300000;/PE.5推挽输出 GPIOEODR|=1ODR|=1ODR&=(1ODR&=(1ODR|=1PB.5 端口配置 GPIO_InitStructure.GPIO_Mod
7、e=GPIO_Mode_Out_PP;/推挽输出 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;/IO口速度为50MHz GPIO_Init(GPIOB,&GPIO_InitStructure);/根据设定参数初始化GPIOB.5 GPIO_SetBits(GPIOB,GPIO_Pin_5);/PB.5 输出高 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;/LED1PE.5 端口配置,推挽输出 GPIO_Init(GPIOE,&GPIO_InitStructure);/推挽输出,IO口速度为50MHz GPIO_
8、SetBits(GPIOE,GPIO_Pin_5);/PE.5 输出高 while(1)GPIO_ResetBits(GPIOB,GPIO_Pin_5);/GPIOB.5输出低 GPIO_SetBits(GPIOE,GPIO_Pin_5);/GPIOE.5输出高 delay_ms(500);GPIO_SetBits(GPIOB,GPIO_Pin_5);/GPIOB.5输出高 GPIO_ResetBits(GPIOE,GPIO_Pin_5);/GPIOE.5输出低 delay_ms(500);广州星翼电子广州星翼电子 官方淘宝店官方淘宝店:http:/http:/ 技术支持论坛技术支持论坛:原子
9、教你玩原子教你玩STM32STM32系列视频系列视频看看我们看看我们“实验实验1跑马灯跑马灯-库函数操作库函数操作 的源码的源码”是怎么实现的?是怎么实现的?STM32位带操作广州星翼电子广州星翼电子 官方淘宝店官方淘宝店:http:/http:/ 技术支持论坛技术支持论坛:原子教你玩原子教你玩STM32STM32系列视频系列视频l就是把每个比特膨胀为一个32位的字,当访问这些字的时候就达到了访问比特的目的,比如说BSRR寄存器有32个位,那么可以映射到32个地址上,我们去访问(读改写)这32个地址就达到访问32个比特的目的。广州星翼电子广州星翼电子 官方淘宝店官方淘宝店:http:/http
10、:/ 技术支持论坛技术支持论坛:原子教你玩原子教你玩STM32STM32系列视频系列视频 l 在 CM3 支持的位带中,有两个区中实现了位带。其中一个是 SRAM 区的最低 1MB 范围,0 x20000000 0 x200FFFFF (SRAM 区中的最低 1MB);第二个则是片内外设区的最低 1MB范围,0 x40000000 0 x400FFFFF (片上外设区中的最低 1MB)。l位带区:支持位带操作的地址区 位带别名:对别名地址的访问最终作用到位带区的访问上 (注意:这中间有一个地址映射过程)l 映射关系式:广州星翼电子广州星翼电子 官方淘宝店官方淘宝店:http:/http:/ 技
11、术支持论坛技术支持论坛:原子教你玩原子教你玩STM32STM32系列视频系列视频#define BITBAND(addr,bitnum)(addr&0 xF0000000)+0 x2000000+(addr&0 xFFFFF)5)+(bitnumPB.8 端口配置 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;/推挽输出 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;/速度为50MHz GPIO_Init(GPIOB,&GPIO_InitStructure);/根据参数初始化GPIOB.8 GPIO_
12、ResetBits(GPIOB,GPIO_Pin_8);/输出0,关闭蜂鸣器输出 while(1)/GPIO_ResetBits(GPIOB,GPIO_Pin_8);/GPIOB.8输出低 BEEP=0;delay_ms(300);BEEP=1;/GPIO_SetBits(GPIOB,GPIO_Pin_8);/GPIOB.8输出高 delay_ms(300);广州星翼电子广州星翼电子 官方淘宝店官方淘宝店:http:/http:/ 技术支持论坛技术支持论坛:原子教你玩原子教你玩STM32STM32系列视频系列视频实验实验3按键输入实例:按键输入实例:#ifndef _KEY_H#define
13、_KEY_H#include sys.h“#define KEY0 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)/读取按键0#define KEY1 GPIO_ReadInputDataBit(GPIOE,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
14、 KEY_DOWN2#define KEY_RIGHT1void KEY_Init(void);/IO初始化u8 KEY_Scan(u8);/按键扫描函数#endifkey.h广州星翼电子广州星翼电子 官方淘宝店官方淘宝店:http:/http:/ 技术支持论坛技术支持论坛:原子教你玩原子教你玩STM32STM32系列视频系列视频void KEY_Init(void)/IO初始化 GPIO_InitTypeDef GPIO_InitStructure;/初始化KEY0GPIOA.13,KEY1GPIOA.15 上拉输入 RCC_APB2PeriphClockCmd(RCC_APB2Periph
15、_GPIOA|RCC_APB2Periph_GPIOE,ENABLE);/使能时钟 GPIO_InitStructure.GPIO_Pin =GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;/PE24 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;/设置成上拉输入 GPIO_Init(GPIOE,&GPIO_InitStructure);/初始化GPIOE2,3,4 GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0;初始化 WK_UPGPIOA.0 下拉输入 GPIO_InitStructure.GPIO_
16、Mode=GPIO_Mode_IPD;/PA0 设置成输入,默认下拉 GPIO_Init(GPIOA,&GPIO_InitStructure);/初始化GPIOA.0u8 KEY_Scan(u8 mode)static u8 key_up=1;/按键按松开标志if(mode)key_up=1;/支持连按 if(key_up&(KEY0=0|KEY1=0|KEY2=0|KEY3=1)delay_ms(10);/去抖动 key_up=0;if(KEY0=0)return KEY_RIGHT;else if(KEY1=0)return KEY_DOWN;else if(KEY2=0)return K
17、EY_LEFT;else if(KEY3=1)return KEY_UP;else if(KEY0=1&KEY1=1&KEY2=1&KEY3=0)key_up=1;return 0;/无按键按下key.c广州星翼电子广州星翼电子 官方淘宝店官方淘宝店:http:/http:/ 技术支持论坛技术支持论坛:原子教你玩原子教你玩STM32STM32系列视频系列视频 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
限制150内