功能:按下KEY键灯亮,再按KEY键灯灭(外部中断)
本实验步骤
1、一些初始化
2、使能IO口时钟/LED灯外设时钟/使能SYSCFG时钟(中断必打开)
3、GPIO与中断线的重映射
4、初始化LED及KEY寄存器
5、初始化线上中断EXTI_Init()
6、配置中断分组NVIC
7、编写中断服务函数

基本概念

中断数量、抢占优先级与响应优先级、中断步骤

中断数量
共有92个中断,10个内核中断,82个可屏蔽中断(常用);
16级可编程的中断优先级

抢占优先级与响应优先级
抢占优先级越高,中断程序优先级越高;
若:中断1抢占优先级为2,中断2抢占优先级为1
响应优先级
若:两中断抢占优先级相同时,中断1响应优先级是3,中断2响应优先级为2(先响应中断2再响应中断1)

中断重要步骤
1、使能IO口时钟
2、使能SYSCFG时钟(中断必打开)
3、GPIO与中断线的重映射
4、初始化线上中断EXTI_Init()
5、配置中断分组NVIC
6、编写中断服务函数:判断中断是否发生;清除某中断线的中断标志位

1、一些初始化

 GPIO_InitTypeDef  GPIO_InitStructure; //KEYGPIO_InitTypeDef  GPIO_InitStructure1;//LEDEXTI_InitTypeDef  EXIT_InitStructure;//EXTINVIC_InitTypeDef  NVIC_InitStructure;//NVIC

2、使能IO口时钟/LED灯外设时钟/使能SYSCFG时钟

    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//ʹĜGPIOCʱ֓ 外设时钟使能RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//ʹĜGPIOAʱ֓ 外设时钟使能RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//SYSCFG时钟

3、GPIO与中断线的重映射

 SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource15);// PA15连接线15

4、初始化LED及KEY寄存器

  //GPIOPC13 LEDGPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;//LED0º͌ED1¶ԓ¦IO¿ڍ 引脚GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//ƕͨʤ³öģʽ 输出模式寄存器GPIO_Init(GPIOC, &GPIO_InitStructure);//³õʼ»¯GPIO //引脚,GPIO结构体地址//1 GPIOPA15 KEYGPIO_InitStructure1.GPIO_Pin = GPIO_Pin_15;//LED0º͌ED1¶ԓ¦IO¿ڍ 引脚GPIO_InitStructure1.GPIO_Mode = GPIO_Mode_IN;//ƕͨʤ³öģʽ 输入模式寄存器GPIO_InitStructure1.GPIO_PuPd = GPIO_PuPd_UP;GPIO_Init(GPIOA, &GPIO_InitStructure1);//³õʼ»¯GPIO //引脚,GPIO结构体地址

注意
输出模式寄存器-不需要设置上拉/下拉寄存器
输入模式寄存器-使用按键时需要将上拉/下拉寄存器设置为上拉状态

5、初始化线上中断EXTI_Init()

 EXIT_InitStructure.EXTI_Line = EXTI_Line15;EXIT_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXIT_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿触发EXIT_InitStructure.EXTI_LineCmd = ENABLE;//使能EXTI_Init(&EXIT_InitStructure);

注意
KEY引脚 为PA15 中断线为15

6、配置中断分组NVIC

    NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;//定义的初始化中断//    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);同下NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;//抢占优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//响应优先级NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);

//LED默认为点亮状态,此处将该处电平置高设置为不亮状态

 GPIO_SetBits(GPIOC, GPIO_Pin_13);//初始化灯不亮

7、编写中断服务函数

//判断中断是否发生
//清除某中断线的中断标志位

void EXTI15_10_IRQHandler(void)
{if(EXTI_GetITStatus(EXTI_Line15)!=RESET){if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13)==1)//灯不亮{GPIO_ResetBits(GPIOC, GPIO_Pin_13);//灯亮}else{GPIO_SetBits(GPIOC, GPIO_Pin_13);//灯不亮}}EXTI_ClearITPendingBit(EXTI_Line15);
#include "stm32f4xx.h"
#include "delay.h"
int main(void)
{//实现功能:按下KEY键灯亮,再按KEY键灯灭//1、使能IO口时钟/LED灯外设时钟//2、使能SYSCFG时钟(中断必打开)//3、GPIO与中断线的重映射//4、初始化线上中断EXTI_Init()//5、配置中断分组NVIC//6、编写中断服务函数//判断中断是否发生//清除某中断线的中断标志位GPIO_InitTypeDef  GPIO_InitStructure; //KEYGPIO_InitTypeDef  GPIO_InitStructure1;//LEDEXTI_InitTypeDef  EXIT_InitStructure;//EXTINVIC_InitTypeDef  NVIC_InitStructure;//NVIC//1、使能IO口时钟/LED灯外设时钟RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//ʹĜGPIOCʱ֓ 外设时钟使能RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//ʹĜGPIOAʱ֓ 外设时钟使能RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//SYSCFG时钟//GPIOPC13 LEDGPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;//LED0º͌ED1¶ԓ¦IO¿ڍ 引脚GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//ƕͨʤ³öģʽ 输出模式寄存器GPIO_Init(GPIOC, &GPIO_InitStructure);//³õʼ»¯GPIO //引脚,GPIO结构体地址//EXTIX_Init()//1 GPIOPA15 KEYGPIO_InitStructure1.GPIO_Pin = GPIO_Pin_15;//LED0º͌ED1¶ԓ¦IO¿ڍ 引脚GPIO_InitStructure1.GPIO_Mode = GPIO_Mode_IN;//ƕͨʤ³öģʽ 输入模式寄存器
//  GPIO_InitStructure1.GPIO_PuPd = GPIO_PuPd_UP;GPIO_Init(GPIOA, &GPIO_InitStructure1);//³õʼ»¯GPIO //引脚,GPIO结构体地址//2 重映射SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource15);// PA15连接线15//3 初始化线上中断EXTI_Init()EXIT_InitStructure.EXTI_Line = EXTI_Line15;EXIT_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXIT_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿触发EXIT_InitStructure.EXTI_LineCmd = ENABLE;//使能EXTI_Init(&EXIT_InitStructure);//4 配置中断分组NVICNVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;//定义的初始化中断// NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;//抢占优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//响应优先级NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);GPIO_SetBits(GPIOC, GPIO_Pin_13);//初始化灯不亮while(1);
}//6、编写中断服务函数//判断中断是否发生//清除某中断线的中断标志位
void EXTI15_10_IRQHandler(void)
{if(EXTI_GetITStatus(EXTI_Line15)!=RESET){if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13)==1)//灯不亮{GPIO_ResetBits(GPIOC, GPIO_Pin_13);//灯亮}else{GPIO_SetBits(GPIOC, GPIO_Pin_13);//灯不亮}}EXTI_ClearITPendingBit(EXTI_Line15);
}

碎碎念

中断服务函数作用
发生了中断就执行该函数内的操作
出错的原因
中断服务函数逻辑存在问题,应该判断灯亮或不亮,按键处的状态本身就有中断发生的状态判断不需要重复进行判断。由于该处是逻辑问题,之前查找了很久问题才发现

STM32F407ZGT6|实现中断操作相关推荐

  1. STM32F407ZGT6|定时器中断

    功能:LED每500ms闪烁一次 步骤: 1.结构体的定义 2.使能LED(GPIOC外设)/定时器/中断/定时器中断 3.初始化LED/定时器 4.配置中断分组NVIC 5.编写中断服务函数(重:溢 ...

  2. 外挂 制作之0D使用---主要是中断操作

    文章整理发布:黑客风云 文章来源:www.05112.com 1.我的os是winXP,无法使用trw2000,而softice装了多次均未成功,还蓝屏死机多次.郁闷. 2.友好的gui界面,不像so ...

  3. 循环的中断操作(C#基础回顾03)

    循环的中断有以下3个命令 break      立即终止循环 continue 立即终止当前的循环(继续执行下一次循环) return     跳出循环及包含该循环的方法(函数) List<st ...

  4. CC2530的中断操作----按键控制led灯亮灭

    中断使能主要有四个步骤: (1)使.EA 位为 1,开中断. (2)设置寄存器 IEN0.IEN1和IEN2中相应中断使能位为1. (3)如果需要,则设置P0.P1.P2各引脚对应的各中断使能位为1. ...

  5. 单片机学习(2)------中断操作

    1.按钮S0接在51单片机的 P3.3(INT1)引脚上,P1口接了8个发光二极管,编程实现:初始状态时,LED0灯亮,其它灯灭,利用S0按钮控制P1口的灯(中断方式),要求每按一下就点亮一盏灯( 前 ...

  6. android 按钮中断,android – 如何“中断”在AccessibilityService中执行的操作?

    我想做什么/我做了什么:我正在尝试为视障用户制作一个非常基本的TalkBack版本.我做了一个简单的辅助功能服务,读取用户点击的按钮的contentDescription并大声读出. @Overrid ...

  7. LPC2124单片机的基础操作——GPIO、外部中断、定时器和串口

    LPC2124单片机的基础操作--GPIO.外部中断.定时器和串口 LPC2124的简介 LPC2124之GPIO GPIO简介 编程习惯 代码编写 LPC2124之EINT(外部中断) EINT简介 ...

  8. 【STM32】定时器中断原理及操作

    目录 时钟的选择及分频 定时器中断有关的寄存器 定时器中断有关的库函数 1.时钟使能函数:RCC_APB1PeriphClockCmd 2.定时器初始化函数:TIM_TimeBaseInit 3.定时 ...

  9. FreeRTOS 临界段和开关中断

    以下转载自安富莱电子: http://forum.armfly.com/forum.php 临界段 代码的临界段也称为临界区,一旦这部分代码开始执行,则不允许任何中断打断.为确保临界段代码 的执行不被 ...

最新文章

  1. 怎样从0一步一步搭建用户激励体系
  2. TCP 和 UDP 绑定同一端口通信的解释
  3. 21、python基础学习-new_three_menu
  4. Taro+react开发(92):taro中的事件处理
  5. golang操作mysql数据库(Go-SQL-Driver/MySQL)
  6. android改变下拉框字体颜色,AutoCompleteTextView下拉字体颜色
  7. 美CFTC任命Jason Somensatto担任金融技术研究部门代理总监
  8. 单片机控制三相异步电动机正反转c语言程序,用FX PLC控制三相异步电动机的启动与正反转...
  9. 归并排序 java_Java实现归并排序
  10. 一张照片让你的安卓手机崩溃
  11. vue2.0模板的三种写法
  12. 适合的才是最好的:记一次内网安装feather经历
  13. pytorch载入部分预训练权重
  14. 华为matex搭载鸿蒙系统,华为 MateX 推迟至 9 月上市,或预装鸿蒙系统
  15. OSPF的DR和BDR
  16. 【附源码】计算机毕业设计java疫情期间优化旅游平台设计与实现
  17. python图像检索
  18. 【docker】配置深度学习环境
  19. 太阳能导电浆料 国产新势力崛起
  20. 【机器学习速成宝典】模型篇02线性回归【LR】(Python版)

热门文章

  1. ios各种手势,很有意思
  2. 设计模式是不是一件脱裤子放屁的事
  3. Hive常用库表操作及知识汇总
  4. MegaCli命令设置raid磁盘阵列为直通模式
  5. 如何将JPG图片转换成WEBP格式
  6. 一个关于概率的问题的思考
  7. 146.个性化推荐系统案例介绍
  8. filecoin space race
  9. Android.网络连接状态(联网,2g,3g,wifi等)
  10. mysql gps数据查询_Mysql数据库中计算两GPS坐标的距离