Stm32学习笔记(三) 按键外部中断

目录

一、原理部分

1.1 按键原理

1.2 外部中断

二、工程部分

2.1 按键初始化

2.2 配置KEY引脚为外部中断

2.2.1开启时钟

2.2.2 GPIO_Init和AFIO中断引脚选择

2.2.3  外部中断EXTI初始化(EXTI_Init)

2.2.4 配置NVIC(中断分组NVIC_PriorityGroupConfig以及初始化NVIC_Init)

1.中断分组函数NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)

2.初始化NVIC

2.3 中断函数


通过按键来触发外部中断,然后控制LED灯的亮灭。

一、原理部分

1.1 按键原理

        在STM32F103 上的按键 KEY0 连接在 PE4 上、KEY1 连接在 PE3 上、KEY_UP 连接在 PA0 上,而且可以看到KEY0 和 KEY1 是低电平有效的,而 KEY_UP 是高电平有效的。

        要注意的是这三个按键外部都没有上下拉电阻,这会导致按键在悬空的时候,对应引脚的电压不确定。例如,在KEY0被按下时,引脚被接地,为低电平;但是在KEY0没被按下的时候,引脚悬空会导致电压的值不确定,所以这种情况下,必须设置为上拉输入模式,否则按键的判定会不准确。相反,KEY__UP这种接法就要求设置为下拉输入模式。

1.2 外部中断

下图为EXTI的基本结构

        外部中断EXTI是由中断控制器NVIC控制的,从上图我们可以看到,要想让GPIO连通到NVIC,还需要先经过AFIO和EXTI这两个部分。其中AFIO寄存器的主要功能是选择中断引脚(GPIOA,GPIOB...等等);EXTI用来配置中断的触发方式(上升沿、下降沿、双边沿以及软件触发)和相应中断的方式(中断响应和事件相应);NVIC用来配置中断的优先级(抢占优先级和中断优先级)。

所以开启外部中断的要依次配置好GPIO、AFIO、EXTI和NVIC,这样才能使用外部中断。

对应的程序框图:

二、工程部分

2.1 按键初始化

这里我们使用KEY0和KEY1来分别控制两个LED的亮灭。

配置它们的GPIO和之前LED的GPIO配置类似,先RCC开启对应GPIO时钟,然后GPIO_Init(),不过要记得配置GPIO为输入模式,并且是上拉输入模式。

void KEY_GPIO_Init(void)
{
  //使能KEY引脚对应IO端口时钟
  KEY0_RCC_CLOCKCMD(KEY0_RCC_CLOCKGPIO, ENABLE);
  KEY1_RCC_CLOCKCMD(KEY1_RCC_CLOCKGPIO, ENABLE);

  //定义IO硬件初始化结构体变量
  GPIO_InitTypeDef GPIO_InitStructure;
  
  GPIO_InitStructure.GPIO_Pin = KEY1_GPIO_PIN;  
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
  GPIO_InitStructure.GP
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值