hal库学习笔记(三):外部中断

目录

硬件知识

一、中断

二、按键中断的配置

函数库知识

外部中断回调函数

代码编写

一、用外部中断开关灯

二、两键控两灯

硬件知识

一、中断

①基本概念

中断就是芯片运行程序时,停一下,去干别的

有些功能很重要,但是放在主程序里面占位置

故可以放在中断函数中,需要的时候,停一下,来做这个比较重要的事情

②优先级

当中断不止一个的时候,设置优先级来排运行先后

  • 抢占优先级
    • 优先级高可打断优先级低的
      • 1级优先>2级优先  
      • 主程序优先级为最低      
    • 相同不打断

  • 子优先级
    • 两个中断(抢占优先级相同)都在等待执行,优先处理子优先级高的

  • 芯片用四位二进制存储优先级
    • 用2位表示抢占优先级,则中断优先级为0~3
      • 00~11 →0~2^2 - 1
    • 用3位表示抢占优先级,则中断优先级为0~7
      • 000~111 →0~2^3 - 1
    • 用4位表示抢占优先级,则中断优先级为0~15
      • 000~111 →0~2^4 - 1
    • 有部分中断优先级大于15,应该是系统自己存到别的地方了

二、按键中断的配置

外部中断一般指由GPIO引脚电平变化产生的中断

按键中断是我自己喜欢这么叫

①参数配置如下

B0调至外部中断模式

有六种触发方式,我们先关注前三种

  • Rising触发:就是电平升高时触发中断
  • falling触发:就是电平降低时触发中断
  • 第三个都触发

注:前面两个词都是我念的顺口编出来的

回忆笔记二中按键设置e050a09b698b478fac41b125efc08ebb.png

我们共地解法,B0调为上拉,按下后B0变为低电平

因此我们选择Falling触发,当B0电平降低(按键按下后)触发中断

②优先级设置

函数库知识

外部中断回调函数

函数来源于"stm32f1xx_hal_gpio.c"

①概念

重中之重了,值得单用一个大写数字

这个函数表示你外部中断是为了干啥

由左边的函数界面快速找到这个函数原型

  • __weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);
    • __weak :弱定义,意思就是你可以写个新函数把他替掉
    • 看名字也知道这是外部中断专属了
      • EX:external

 ②如何编写

继续扒官方例程

官方给的例程如下

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  if (GPIO_Pin == GPIO_PIN_0)
  {
    /* Toggle LED3 */
    BSP_LED_Toggle(LED3);
  }
}

这个程序流程图也很简单,目的一看便知

是不是0号引脚,是就翻转

此外中断回调函数不需要声明(因为弱定义的时候已经声明过了,问题不大)

再然后我们写个模板让keil5记住吧

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  if (GPIO_Pin == GPIO_PIN_0)
  {
    /* 中断后做点什么 */
   
  }
}

 

最后注意关闭文件时不要保存,别把人家例程搞乱了

还有这个过程就是让A5闪烁,如果你担心灯或者板子坏了什么的,就直接下这个工程检测

代码编写

一、用外部中断开关灯

①初始化配置

配好一个按键&一个灯

②文件配置

③代码编写

在主函数中找到他给你留的位置,模板套进去

再写个翻转函数进去

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  if (GPIO_Pin == GPIO_PIN_0)
  {
    /* 中断后做点什么 */

    Red_Toggle();
  }
}

 二、两键控两灯

①先初始化

A1,A5小灯

(手快点错了,问题不大)

 B0,B1按键

开启中断

 ②编写程序

 回调函数

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  if (GPIO_Pin == GPIO_PIN_0)
  {
    /* 中断后做点什么 */

		Green_Toggle() ;

    
  }
	 else if (GPIO_Pin == GPIO_PIN_1)
  {
    /* 中断后做点什么 */
		Green_Toggle();
  }

}

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值