【HAL库学习笔记】二、STM32的中断系统

STM32的中断系统

一、中断系统的基本概念

二、中断程序的设计思路

使用CubeMX工具初始化中断配置

编写中断服务函数,需要用户自己重写虚函数,如果有面向对象编程的基础(Cpp),那么就知道这个_weak类似于Cpp中的virtual,用户可以编写自己的虚函数来进行覆盖原函数,实现自己的功能。

三、中断实验

目的是编写中断服务函数来实现上面两个功能,这里只需要注意配置自己的中断触发引脚即可,不需要和笔者有相同的开发板。这里笔者使用的是正点原子精英开发板 STM32F103ZET6,具体的引脚如下图所示

将KEY0,设置为外部中断输入,下降沿触发,在中断服务函数中修改LED0的状态;
将KEY1,设置为外部中断输入,上升沿触发,在中断服务函数中修改LED1的状态。
打开CubeMX进行工程配置,先配置时钟,选择外部晶振

选择外部输入时钟,将时钟配置为最大就可以了

接下来配置GPIO,我们需要用到两个LED和两个KEY,所以需要配置四个GPIO,分别将两个LED设置为输出模式GPIO_Output,将两个KEY设置为外部中断模式GPIO_EXITIx

由于我们需要KEY0是下降沿触发,KEY0对应的引脚是PE4,

同理KEY1是上升沿触发,KEY1对应的引脚为PE3,

然后进入NVIC,使能这两个中断通道

这样就配置完成了,可以生成代码了。(具体的配置方法请参考这篇博客)
打开配置好的工程文件,可以在gpio.c文件中看到外部初始化的代码部分

同时在stm32f1xx_it.c中可以看到,中断处理函数

接下来就需要我们重写自己的中断服务函数了,首先找到,中断服务函数是哪个。利用转到定义

找到我们需要重写的中断回调函数

main.c的可写用户代码区,重写中断回调函数

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)   //重写中断回调函数
{
    if(GPIO_Pin == GPIO_PIN_3)      //判断引起中断的引脚,KEY1翻转LED1
    {
        HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_5);
    }
    if(GPIO_Pin == GPIO_PIN_4)      //KEY0翻转LED0
    {
        HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5);
    }
}

由于两个按键触发中断都会调用同一个中断回调函数,所以我们可以在一个中断回调函数中处理两个中断。

Reference

https://www.bilibili.com/video/BV1m7411H7oT?p=4&spm_id_from=pageDriver&vd_source=d02fb26eb2345ac42c054db0bb8d8864

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值