硬件模块常使用的外部中断及中断优先级


对于STM32来说,想要获取的信号是外部驱动的很快的突发信号

例1:旋转编码器的输出信号:

  1. 可能很久都不会拧它,不需要STM32做任何事情
  2. 但是一拧它,就会有很多脉冲波形需要STM32接收
  3. 信号是突发的,STM32不知道什么时候会来
  4. 外部驱动的,STM32只能被动读取
  5. 信号非常快,STM32稍微晚一点来读取,就会错过很多波形
    在这里插入图片描述

例2:红外遥控接收头的输出:

  1. 接收到遥控数据后,它会输出一段波形,这个波形转瞬即逝,并且不会等你
    在这里插入图片描述

例3:按键

  1. 外部驱动的突发事件
  2. 但是并不推荐使用中断来读取按键,因为外部中断不好处理按键抖动和松手检测的问题
  3. 对于按键来说,输出波形也不是转瞬即逝的
  4. 要求不高的话可以在主程序中循环读取
  5. 如果不想用主循环读取,可以考虑定时器中断读取的方式
  6. 这样既可以做到后台读取按键值、不阻塞主程序,也可以很好地处理按键抖动和松手检测的问题
    在这里插入图片描述

总结:

使用外部中断的硬件模块所具有的特性可能包括:

  1. 信号是突发的
  2. 信号速度非常快,转瞬即逝,难以捕捉
  3. 没有信号过来时,SMT32不需要做任何事情
  4. 在中断内部时不需要做很复杂的事情
  5. 注意:建议在中断和主函数中不要操作同一个外设,避免发生异常:可以在中断里操作变量或者标志位,当中断返回时,再对这个变量进行显示和操作,这样既能保证中断函数的简短快速,又能保证不产生冲突的硬件操作

在其他地方,也可以多用变量或者标志位,来减少代码之间的耦合性,让各部分代码相互独立。
仅用变量、标志位或者函数作为接口,能使程序更加清洗,代码更加强健。

中断优先级:

  1. pre-emption priority 先占优先级——抢占优先级
    抢占优先级是中断能否打断其他中断的属性。
    在STM32中,中断服务函数正在执行时,如果发生了一个更高抢占优先级的中断,当前中断会被新的中断打断,形成中断嵌套。抢占优先级由NVIC_IRQChannelPreemptionPriority参数配置,优先级数值越小,优先级越高。

  2. subpriority 从占优先级——响应优先级
    响应优先级在抢占优先级相同的情况下起作用。当两个抢占优先级相同的中断同时发生时,响应优先级高的中断会先得到处理。响应优先级由NVIC_IRQChannelSubPriority参数配置,数值越小,优先级越高。

  3. 优先级分组(Priority Grouping)
    STM32通过NVIC_PriorityGroupConfig函数设置优先级分组,这决定了抢占优先级和响应优先级在中断优先级寄存器中的位分配。分组有五种方案,从第0组到第4组,分别对应不同的抢占优先级和响应优先级的位数配置。例如,第2组配置中,抢占优先级有4个等级(0-3),响应优先级也有4个等级(0~3)。

评论 35
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值