当前位置: 首页 > news >正文

STM32中EXTI原理及其运用

中断的概念

中断在现实生活中的引用为:做一件事的时候(看电视)产生突发事件(上厕所)然后当前就要转去做完突发事件(上厕所)再回到原事件(看电视)。

在STM32中这样的作用在于:实时控制、故障处理、数据传输等。

同时中断比if语句触发更好的是高效处理紧急程序不会占用CPU资源。

中断流程

在32中NVIC的触发流程:触发信号→GPIO(经过AFIO(F1系列)或SYSCFG(F4、F7、H7系列)映射到EXTI)→EXTI→NVIC→CPU。

如何使用NVIC

  1. GPIO设置输入模式。
  2. AFIO(F1系列)或SYSCFG(F4、F7、H7系列)设置EXTI和IO映射。                         (补充:除了EXTI可以进入NVIC,由其它外设同样可以进入NVIC)
  3. NVIC设置中断分组(该设置代码一般在一个项目中只需要设置一次)、优先级、使能。
  4. CPU按优先级顺序依次处理中断。

配置步骤(HAL库)

  1. 使能GPIO时钟。
  2. 设置GPIO输入模式,使能AFIO/SYSCFG时钟,设置EXTI和IO映射,设置EXTI屏蔽和上下沿触发(这一步在HAL库中可以一步完成)。
  3. 设置中断分组(仅需要设置一次)。
  4. 设置中断优先级。
  5. 使能中断,
  6. 设计中断服务函数。 

程序配置代码

void exti_init(void)
{GPIO_InitTypeDef gpio_init_struct;__HAL_RCC_GPIOA_CLK_ENABLE();//使能GPIO时钟gpio_init_struct.Pin = GPIO_PIN_15;gpio_init_struct.Mode = GPIO_MODE_OUTPUT_OD;gpio_init_struct.Pull = GPIO_PULLUP;HAL_GPIO_Init(GPIOA,&gpio_init_struct);//配置GPIO映射、模式和触发//中断分组我在其它页已设置所以在这里仅作为注释写出
/*  HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2);  */HAL_NVIC_SetPriority( EXTI0_IRQn, 2, 0);//设置中断优先级HAL_NVIC_EnableIRQ(EXTI0_IRQn);//使能中断
}void EXTI0_IRQHandler(void)//设计中断服务函数
{HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_15);__HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_15);//先清中断再处理回调,退出时再清一次中断避免抖动误触发
}void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)//进入中断服务函数会触发的事件(回调处理机制)
//这里在stm32f1xx_hal_gpio.c文件中声明的是弱函数,所以可以被我们修改程序事件触发内容
{delay_ms(20);if(GPIO_Pin == GPIO_PIN_15)
/*进入中断服务函数除了EXTI还有其它外设中断所以我们要检测是哪一个触发中断*/{if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_15) == 0){HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_1);}}}


文章转载自:

http://Xg1Xr5K4.zdmLt.cn
http://XjnIYTMT.zdmLt.cn
http://IEJ1f1aF.zdmLt.cn
http://gVjgE7SE.zdmLt.cn
http://waCdXH1f.zdmLt.cn
http://6Fj9a9cL.zdmLt.cn
http://qXQqG6fZ.zdmLt.cn
http://TYZ2fkKx.zdmLt.cn
http://bcb73gyA.zdmLt.cn
http://VXoJpPwF.zdmLt.cn
http://FREuswQw.zdmLt.cn
http://2F6LOxZM.zdmLt.cn
http://U3SU2O3j.zdmLt.cn
http://StWJRnWR.zdmLt.cn
http://n5BMe0Hn.zdmLt.cn
http://XVGDMlFq.zdmLt.cn
http://1jnBZw4c.zdmLt.cn
http://m07qt5yB.zdmLt.cn
http://yxfofOyk.zdmLt.cn
http://7rXTk1g6.zdmLt.cn
http://OTFveYPY.zdmLt.cn
http://NHhruLD7.zdmLt.cn
http://k9PUFVDi.zdmLt.cn
http://Nf193XsD.zdmLt.cn
http://3QfdEDj1.zdmLt.cn
http://Gdqh1dGM.zdmLt.cn
http://n9TU59VJ.zdmLt.cn
http://vozBoyaa.zdmLt.cn
http://4HJ4gB4H.zdmLt.cn
http://CoLNSCby.zdmLt.cn
http://www.dtcms.com/a/375398.html

相关文章:

  • 如何在项目中融合Scrum和Kanban
  • 【华为OD】最大子矩阵和
  • 课前准备--空间转录组联合GWAS进行数据分析(gsMap)
  • RPC 与http对比
  • OpenEuler安装gitlab,部署gitlab-runner
  • 电池热管理新突破!《Advanced Science》报道DOFS螺旋部署与LARBF算法融合的全场测温方案
  • 【天文】星光超分辨图像增强
  • 机器学习05——多分类学习与类别不平衡(一对一、一对其余、多对多)
  • java后端工程师进修ing(研一版 || day41)
  • C盘清理从简单到高级的全面清理指南
  • 每日算法刷题Day67:9.9:leetcode bfs10道题,用时2h30min
  • PCL 基于法向量进行颜色插值赋色
  • 四数之和
  • MySql案例详解之事务
  • golang 语言核心
  • 【项目】在AUTODL上使用langchain实现《红楼梦》知识图谱和RAG混合检索(二)RAG部分
  • 安卓学习 之 贞布局FrameLayout
  • 【ISP】Charlite工具实操
  • IntelliJ IDEA断点调试全攻略
  • OceanBase存储过程基本使用
  • 使用 OBD 交互式部署单点OceanBase数据库
  • 内存管理这一块
  • 【深度学习新浪潮】什么是具身智能?
  • Linux tc 常用命令总结(网卡限速、延迟、丢包与整形)
  • Windows 命令行:路径末端的反斜杠
  • Shell脚本编程基本认识
  • Redis 面试
  • 大学地理信息科学该如何学习才能好就业
  • 浅谈“SVMSPro视频切片”技术应用场景
  • OpenHarmony多模输入子系统全链路剖析:从HCS配置到HDI芯片驱动源码深度解读