打印
[应用相关]

STM32外部中断

[复制链接]
212|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
观海|  楼主 | 2025-3-13 18:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/m0_67729470/article/details/146214581

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

120

主题

4234

帖子

1

粉丝