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

STM32外部中断

GPIO->AFIO->EXTI->NVIC

进入NVIC是中断 不进入NVIC是事件

AFIO复用重映射

IP[59]~IP[0]分别对应中断 59~0。而每个可屏蔽中断占用的 8bit 并没有 全部使用,而是只用了高 4 位。这 4 位,又分为抢占优先级和子优先级。抢占优先级在前,子(响应)优先级在后。

NVIC优先级分组:抢占优先级高的可以中断嵌套,响应优先级高的可以优先排队
还有一种情况就是当两个或者多个中断的抢占式优先级和响应优先级相同时,那么就遵循 自然优先级,看中断向量表的中断排序,数值越小,优先级越高。


硬件优先级: 越小优先级越高
EXTI:外部中断 检测指定引脚的电平,如果发生变化立马执行中断


STM32F103ZET6  0-4每个中断线都有一个中断函数,5-9共用一个,10-15也共用一个中断服务函数,16个引脚只有7个中断服务函数

中断初始化步骤
1.使能时钟
2.设置GPIO  Mode设置位it中断模式的上升/下降/双边沿
3.设置中断分组->可以不设,HAL_Init 里设置过(默认有为2,想改变的话重新设置分组 8-10位)
4.设置优先级--> HAL_NVIC_SetPriority(中断号,抢占优先级,响应优先级);
5.使能中断 HAL_NVIC_EnableIRQ(中断号);
-------------------------------
6.中断公共服务函数  //在启动文件中找
void EXTI0_IRQHandler(){
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_*);中断公共处理函数
_HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_*)}
----------------------------------
7.__weak重写弱函数回调函数
   多个引脚需判断
------------------------------------------

中断服务函数调用公共中断服务函数处理(HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_*);)公共中断处理函数调用回调函数,而回调函数为__weak弱函数,自己需要对其重写,写入自己的逻辑代码

中断中的Mode需要选择上升沿/下降沿/双边沿

__weak   代表弱函数

    *** 相同的pin不能同时触发中断  例如GPIOA_pin1 和GPIOB_pin1不能同时用  因为20条线不够80个GPIO口使用 所以GPIOA-E的相同端口使用一条,不能同时使用

AFIO主要完成两个任务:复用引脚重映射、中断引脚选择  //HAL库中不需要配置 在HAL_GPIO_Init中自动配置

中断建议:在中断函数里最好不要执行耗时过长的代码。
                 不要在中断函数和主函数调用相同的代码或者操作同一个硬件

内部时钟频率:72MHz
 


http://www.kler.cn/a/588915.html

相关文章:

  • 小程序网络大文件缓存方案
  • Qt MainWindow简单例子(文本编辑)
  • k8s 修改节点驱逐阈值
  • 笔记:基于springboot+ShardingSphere-jdbc5.0.0的分库分表(偏yml配置)
  • 考研系列-408真题计算机网络篇(18-23)
  • JSON 语法详解
  • 用Embassy库编写的自动化下载程序
  • C++28--特殊类设计
  • 汽车零部件行业研发管理体系化建设:全星研发管理 APQP 软件系统来助力
  • 扩散模型DDPM
  • 全国医院数据可视化分析系统
  • 以 ArcGIS Pro 为笔,绘就水墨地图画卷
  • C/C++实现工厂模板设计模式(Factory Pattern)
  • 如何配置 Docker 以实现无需 sudo 使用
  • 《解锁 Lodash:简化复杂逻辑的实战技巧》​
  • 浏览器对一个资源设置了缓存,如何清除缓存,且后续请求不命中缓存
  • 深入浅出TCP与UDP:三次握手、四次挥手及面试通关指南
  • 哈尔滨算力服务器托管推荐-青蛙云
  • 运行Clip多模态模型报错:OSError: Can‘t load tokenizer for ‘bert-base-chinese‘
  • Spring Cloud Eureka - 高可用服务注册与发现解决方案