使用STM32CubeMX实现按键控制LED(中断方式)

本文介绍了使用STM32F103C8T6微控制器通过中断控制LED亮灭的过程。利用STM32CubeMX进行配置,实现了外部中断触发LED的状态改变。

(本文是基于stm32f103c8t6加上LED组成的简易按键控制亮灯)

一、什么是中断

1、基础知识

  1. cortex-m3支持256个中断,其中包含了16个内核中断,240个外部中断。(本博文只介绍60个外部可屏蔽中断)
  2. stm32只有84个中断,包括16个内核中断和68个可屏蔽中断
  3. stm32f103上只有60个可屏蔽中断,f107上才有68个中断
  4. 先占优先级也就是抢占优先级,概念等同于51单片机中的中断。假设有两中断先后触发,已经在执行的中断先占优先级如果没有后触发的中断 先占优先级更高,就会先处理先占优先级高的中断。也就是说又有较高的先占优先级的中断可以打断先占优先级较低的中断。这是实现中断嵌套的基础。
    次占优先级,也就是响应优先级,只在同一先占优先级的中断同时触发时起作用,先占优先级相同,则优先执行次占优先级较高的中断。次占优先级不会造成中断嵌套。 如果中断的两个优先级都一致,则优先执行位于中断向量表中位置较高的中断。详情请参考:STM32NVIC和中断总结

2、中断向量表

在这里插入图片描述

这里是部分可设置(也就是我们自己可以设置为我们想要的中断名称以及向量)中断向量。详情请参考STM32F103xx中文参考手册第九章《中断与事件》。

二、中断的作用及优先级

跟据中断的定义,我们可以通过中断使处理器转而去优先运行正常控制流之外的代码。
当中断信号达到时, CPU 必须停止它当前正在做的事情,并且切换到一个另一个活动。为了做到这就要在内核态堆钱保存程序计数器的当前值 (寄存器的内容) ,并把与中断类型相关的地址放进程序计数量。

举个简单的例子,最近恰逢电赛时期,在做东西的过程中我发现了许多问题,我本来是想做一个可视化的电压检测器,但是在写代码与实践的过程中我发现如果我把所有事情交给一块板子来处理,这块板子就会显得好忙好忙,于是它就开始“罢工”,显示屏上卡住了,我转到串口发送也会卡住,也就是所谓的程序跑飞了,我一开始一直不知道原因,后面才发现我用的ADC模式是扫描,这种方式对于板子的CPU占用真的太高了,也就是板子一直在做一个工作——AD转换,以至于顾不上显示屏上刷新了,后面我该用中断方式来传输AD转换数据就不会出现这种情况了,所以说中断对于我们来说真的用处很大。

那么有的小伙伴就要问了,如果很多个中断都被触发我们该执行哪一个程序呢,这就要看到我们的中断优先级了。
1、多个中断同时出现时,处理器先响应高优先级的中断
2、低优先级中断的ISR执行时,可以被高优先级中断再次打断
3、ISR比App Code拥有更高的执行优先级
详细请参考:

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值