中断控制器

STM32的中断控制器是NVIC,可嵌套式中断控制。
中断优先级。一共有四位来表示,且这四位又被分为 组优先级和子优先级

外部中断

stm32中存在外部中断,管理着所有GPIO口的中断响应,有外部中断0-15,对应着GPIOX的 0-15端口。即外部中断线0 可以是PA0、PB0、PC0.。。。。,使用时进行配置,告诉外部中断使用的是哪个GPIO的哪个口。
外部中断 exti 在总线APB2上,使用时要先打开APB2总线时钟。

代码

使用四个按键来触发中断;按键连接在 PF9/8/7 PE6

void my_exti_init(void)
{//使能外部中断,外部中断 EXTI 在APB2总线上RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//配置EXTI,告诉外部中断,哪些端口要开启中断SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOF, EXTI_PinSource9);SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOF, EXTI_PinSource8);SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOF, EXTI_PinSource7);SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource6);//配置 F9 F8 F7 E6,这四个按键所在的GPIO口的中断,这样按下按键就会触发中断//配置NVIC 中断相关的参数//1)配置NVIC的分组方式NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//2)调用NVIC的初始化函数  NVIC_InitTypeDef Nvic_Value;Nvic_Value.NVIC_IRQChannel = EXTI9_5_IRQn;//选择中断号Nvic_Value.NVIC_IRQChannelCmd = ENABLE;//使能该中断Nvic_Value.NVIC_IRQChannelPreemptionPriority = 2;//配置组优先级的级别Nvic_Value.NVIC_IRQChannelSubPriority = 2;//配置子优先级的级别NVIC_Init(&Nvic_Value);//按照上述配置初始化NVIC控制器//配置EXTI相关的初始化参数EXTI_InitTypeDef Exti_Value;Exti_Value.EXTI_Line = EXTI_Line9 | EXTI_Line8 | EXTI_Line7 | EXTI_Line6;//选择外部中断号Exti_Value.EXTI_LineCmd = ENABLE;//使能外部中断Exti_Value.EXTI_Mode = EXTI_Mode_Interrupt;//选择中断模式Exti_Value.EXTI_Trigger = EXTI_Trigger_Falling;//选择下降沿触发EXTI_Init(&Exti_Value);
}

中断触发时的响应函数

void EXTI9_5_IRQHandler(void)
{//判断具体是哪个端口触发了中断,读取每个中断标志位;处理完之后要手动清除中断标志位if(EXTI_GetITStatus(EXTI_Line9) == SET)//判断是否是由EXTI9触发的中断{handler0();//调用处理函数EXTI_ClearITPendingBit(EXTI_Line9);//清除EXTI9的中断标志位}if(EXTI_GetITStatus(EXTI_Line8) == SET){handler1();EXTI_ClearITPendingBit(EXTI_Line8);}if(EXTI_GetITStatus(EXTI_Line7) == SET){handler2();EXTI_ClearITPendingBit(EXTI_Line7);}if(EXTI_GetITStatus(EXTI_Line6) == SET){handler3();EXTI_ClearITPendingBit(EXTI_Line6);}}

handler 为自定义的响应函数,由main函数传递过来

typedef void (*my_callback_func)(void);void my_exti_set_callback_func(my_callback_func func0, \
my_callback_func func1,\
my_callback_func func2,\
my_callback_func func3)
{handler0 = func0;handler1 = func1;handler2 = func2;handler3 = func3;
}

main函数

int main(void)
{my_led_init();key_init();my_systemclk_init();my_exti_init();my_exti_set_callback_func(func0,func1,func2,func3);while(1) ;}void func0(void)
{my_led_on_num(0);
}
void func1(void)
{my_led_on_num(1);
}
void func2(void)
{my_led_on_num(2);
}
void func3(void)
{my_led_off();
}

STM32F407-外部中断相关推荐

  1. stm32l4 外部中断按键会卡死_【stm32f407】外部中断实现按键中断方式

    一.外部中断 STM32F4的每个IO都可以作为外部中断的中断输入口,这点也是STM32F4的强大之处.STM32F407的中断控制器支持22个外部中断/事件请求.每个中断设有状态位,每个中断/事件都 ...

  2. 【STM32】外部中断

    00. 目录 文章目录 00. 目录 01. 外部中断简介 02. 外部中断配置 03. 外部中断步骤 04. 硬件设计 05. 程序示例一 06. 程序示例二 07. 附录 08. 声明 01. 外 ...

  3. [Keil][Verilog][微机原理] 流水灯、存储器、外部中断实验_北京邮电大学计算机原理与应用课程实验报告

    计算机原理与应用实验-流水灯.存储器.外部中断实验 1 实验一 流水灯实验 1.1 实验目的 掌握ARM开发工具的使用. 掌握基本IO的使用. 1.2 实验原理及内容 电路结构图 实现流水灯的电路结构 ...

  4. (十四)STM32——外部中断(EXTI)

    目录 学习目标 内容 介绍 配置 代码 运行结果 总结 学习目标 本节内容我们将介绍一下外部中断,STM32F4 的每个 IO 都可以作为外部 中断的中断输入口,这点也是 STM32F4 的强大之处. ...

  5. STM32基础-外部中断与优先级

    一,中断引脚 STM32F407有23个外部中断检测器,芯片多达 140 个 GPIO(STM32F405xx/07xx 和 STM32F415xx/17xx)通过以下方式连接到 16 个外部中断/事 ...

  6. STM32CubeMX EC11旋转编码器开发心路历程(encode模式 外部中断模式 普通IO口模式 定时器模式探索)

    文章目录 ENCODE模式探索 普通IO口探索 定时器使用 外部中断探索 编码器开关的理解 最后的实现方案 这篇文章主要还是记录整个过程以及想法的不断改进,对于一些实际的操作还有代码,我准备都分开写到 ...

  7. STM32单片机外部中断配置讲解

    2019独角兽企业重金招聘Python工程师标准>>> 单片机外部中断简介 所谓外部中断,就是通过外部信号所引起的中断,如单片机引脚上的电平变化(高电平.低电平).边沿变化(上升沿. ...

  8. hal库开启中断关中断_「正点原子NANO STM32开发板资料连载」第十章 外部中断实验...

    1)实验平台:ALIENTEK NANO STM32F411 V1开发板 2)摘自<正点原子STM32F4 开发指南(HAL 库版>关注官方微信号公众号,获取更多资料:正点原子 第十章 外 ...

  9. nrf52840 gpiote如何配置中断输入_STM32第四章外部中断管理

    点击上方"果果小师弟",选择"置顶/星标公众号"干货福利,第一时间送达!STM32F4 的每个 IO 都可以作为外部中断的中断输入口,这点也是 STM32F4 ...

  10. LPC1768外部中断与GPIO中断

    LPC1768的外部中断严格来说只有四个,分别是EINT0,EINT1,EINT2,EINT3,技术手册上有如下说明 控制这四个外部中断靠以下寄存器 这三个寄存器的0 1 2 3位分别代表中断的0 1 ...

最新文章

  1. 不同真菌物种注释数据库对群落组成的影响
  2. 微信和支付宝支付模式详解及实现(.Net标准库)- OSS开源系列
  3. Java深拷贝与浅拷贝
  4. 腾讯再次劝退高龄员工,IT人的中年危机,我来教你化解!
  5. numpy版本不对应导致tensorflow出错
  6. 我的世界服务器无限繁殖,我的世界村民无限繁殖方法_我的世界如何无限繁殖村民_牛游戏网...
  7. 兼容浏览器将NodeList对象转换为数组
  8. 搬运 centos7.2 apache 绑定二级目录 访问依然是apache页面
  9. 关于c/c++/obj-c的混合使用 (2010-06-22 10:05:33)
  10. 【Breadth-first Search 】专题3
  11. PHP正则表达式学习(一) 模式修正符
  12. IT职业发展与诺兰模型
  13. 华硕win10键盘失灵_Win10 进阶用法汇总
  14. 从输入URL到页面渲染完成 -戈多编程
  15. 1091 Acute Stroke (30 分)广度优先搜索,用queue,重写一遍
  16. 蜗牛星际D款安装黑群晖教程
  17. Cox比例风险回归(Cox ProportionalHazards Model) 到底选用哪种回归分析 r到底选择哪种回归分析 r选择生存分析还是cox分析
  18. 从零学习Belief Propagation算法(二)
  19. 在scrapy中params无处安放???
  20. 点线面的融会贯通学习方法探讨

热门文章

  1. Python字符串及运算
  2. python 中的 import
  3. 大学计算机实践论文,大学计算机实践论文.docx
  4. 计算机怎么关屏幕,电脑双屏怎么关闭一个显示器 电脑关闭双屏的具体步骤
  5. 软件测试行业能干的多少岁?是不是真的只能干到35.....
  6. win10右键新建没有文本文档
  7. SAAS的概念及优缺点
  8. ubuntu lotus testnet-staging
  9. TensorFlow2 -官方教程 :保存和恢复模型
  10. CAP原理应用与分布式矩阵