STM32F407-外部中断
中断控制器
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-外部中断相关推荐
- stm32l4 外部中断按键会卡死_【stm32f407】外部中断实现按键中断方式
一.外部中断 STM32F4的每个IO都可以作为外部中断的中断输入口,这点也是STM32F4的强大之处.STM32F407的中断控制器支持22个外部中断/事件请求.每个中断设有状态位,每个中断/事件都 ...
- 【STM32】外部中断
00. 目录 文章目录 00. 目录 01. 外部中断简介 02. 外部中断配置 03. 外部中断步骤 04. 硬件设计 05. 程序示例一 06. 程序示例二 07. 附录 08. 声明 01. 外 ...
- [Keil][Verilog][微机原理] 流水灯、存储器、外部中断实验_北京邮电大学计算机原理与应用课程实验报告
计算机原理与应用实验-流水灯.存储器.外部中断实验 1 实验一 流水灯实验 1.1 实验目的 掌握ARM开发工具的使用. 掌握基本IO的使用. 1.2 实验原理及内容 电路结构图 实现流水灯的电路结构 ...
- (十四)STM32——外部中断(EXTI)
目录 学习目标 内容 介绍 配置 代码 运行结果 总结 学习目标 本节内容我们将介绍一下外部中断,STM32F4 的每个 IO 都可以作为外部 中断的中断输入口,这点也是 STM32F4 的强大之处. ...
- STM32基础-外部中断与优先级
一,中断引脚 STM32F407有23个外部中断检测器,芯片多达 140 个 GPIO(STM32F405xx/07xx 和 STM32F415xx/17xx)通过以下方式连接到 16 个外部中断/事 ...
- STM32CubeMX EC11旋转编码器开发心路历程(encode模式 外部中断模式 普通IO口模式 定时器模式探索)
文章目录 ENCODE模式探索 普通IO口探索 定时器使用 外部中断探索 编码器开关的理解 最后的实现方案 这篇文章主要还是记录整个过程以及想法的不断改进,对于一些实际的操作还有代码,我准备都分开写到 ...
- STM32单片机外部中断配置讲解
2019独角兽企业重金招聘Python工程师标准>>> 单片机外部中断简介 所谓外部中断,就是通过外部信号所引起的中断,如单片机引脚上的电平变化(高电平.低电平).边沿变化(上升沿. ...
- hal库开启中断关中断_「正点原子NANO STM32开发板资料连载」第十章 外部中断实验...
1)实验平台:ALIENTEK NANO STM32F411 V1开发板 2)摘自<正点原子STM32F4 开发指南(HAL 库版>关注官方微信号公众号,获取更多资料:正点原子 第十章 外 ...
- nrf52840 gpiote如何配置中断输入_STM32第四章外部中断管理
点击上方"果果小师弟",选择"置顶/星标公众号"干货福利,第一时间送达!STM32F4 的每个 IO 都可以作为外部中断的中断输入口,这点也是 STM32F4 ...
- LPC1768外部中断与GPIO中断
LPC1768的外部中断严格来说只有四个,分别是EINT0,EINT1,EINT2,EINT3,技术手册上有如下说明 控制这四个外部中断靠以下寄存器 这三个寄存器的0 1 2 3位分别代表中断的0 1 ...
最新文章
- 不同真菌物种注释数据库对群落组成的影响
- 微信和支付宝支付模式详解及实现(.Net标准库)- OSS开源系列
- Java深拷贝与浅拷贝
- 腾讯再次劝退高龄员工,IT人的中年危机,我来教你化解!
- numpy版本不对应导致tensorflow出错
- 我的世界服务器无限繁殖,我的世界村民无限繁殖方法_我的世界如何无限繁殖村民_牛游戏网...
- 兼容浏览器将NodeList对象转换为数组
- 搬运 centos7.2 apache 绑定二级目录 访问依然是apache页面
- 关于c/c++/obj-c的混合使用 (2010-06-22 10:05:33)
- 【Breadth-first Search 】专题3
- PHP正则表达式学习(一) 模式修正符
- IT职业发展与诺兰模型
- 华硕win10键盘失灵_Win10 进阶用法汇总
- 从输入URL到页面渲染完成 -戈多编程
- 1091 Acute Stroke (30 分)广度优先搜索,用queue,重写一遍
- 蜗牛星际D款安装黑群晖教程
- Cox比例风险回归(Cox ProportionalHazards Model) 到底选用哪种回归分析 r到底选择哪种回归分析 r选择生存分析还是cox分析
- 从零学习Belief Propagation算法(二)
- 在scrapy中params无处安放???
- 点线面的融会贯通学习方法探讨