HAL库实验中断开关点灯及串口通信

本文主要介绍stm32、DMA通信原理和编程方法,使用stm32tubemx和HAL库分别完成下面两个编程练习。

一、中断介绍

1.中断的定义

中断是指计算机在执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的.。事件处理程序,待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程。
中断分为同步中断和异步中断。

同步中断——同步中断是当指令执行时由 控制单元产生的,之所以称为同步,是因为只有在一条指令终止执行后 CPU 才会发出中断
异步中断——异步中断是由其他硬件设备依照 CPU 时钟信号随机产生的。
在这里插入图片描述

2.中断的作用

当中断信号达到肘, CPU 必须停止它当前正在做的事情,并且切换到一个另一个活动。为了做到这就要在内核态堆钱保存程序计数器的当前值 (寄存器的内容) ,并把与中断类型相关的地址放进程序计数量。
在这里插入图片描述
中断处理是指CPU响应中断,转入中断处理程序,系统开始处理中断。
中断响应是指CPU收到中断请求后转向相应的事件处理程序。

开中断后,系统就可以响应其他的中断了,关中断后,系统不响应其他的中断除非优先级高的中断。

中断屏蔽是指在中断请求产生后,系统用软件方式有选择地封锁部分中断而允许其余部分中断仍能得到响应。

3.中断的类型及优先级

在这里插入图片描述
中断的类型
硬中断:通过处理器中断信号线产生的中断
软中断:通过非法指令或特殊指令触发的中断

中断优先级
1.多个中断同时出现时,处理器先响应高优先级的中断
2.低优先级中断的ISR执行时,可以被高优先级中断再次打断
3.ISR比App Code拥有更高的执行优先级

二、CubeMX中断方式点灯

1.题目要求

用stm32F103核心板的GPIOA端一管脚接一个LED,GPIOB端口一引脚接一个开关(用杜邦线模拟代替)。采用中断模式编程,当开关接高电平时,LED亮灯;接低电平时,LED灭灯。

2.实物准备

STM32F103C8T6最小核心板
设置PB5端接开关,PA2接LED

LED灯的触发方式
按键按下瞬间,形成下降沿
按键释放瞬间,形成上升沿
在这里插入图片描述

3.工程设置

1.设置PA2接LED,PB5接开关
按键按下,引脚PB5读到低电平
按键释放,引脚PB5读到高电平
在这里插入图片描述
在这里插入图片描述
对于开关对应管脚PB5,设置其触发方式为上升沿触发

External Interrupt Mode with Rising edge trigger detection上升沿
External Interrupt Mode with Falling edge trigger detection下降沿
External Interrupt Mode with Rising/Falling edge trigger detection上升沿和下降沿

User Label处设置名字为A1_EXTI
在这里插入图片描述
使能对应的外部中断线,点击Enabled
在这里插入图片描述
2.配置中断优先级
在这里插入图片描述
3.时钟设置
在这里插入图片描述
之后生成工程文件即可

4.代码调试

在Keil文件中的gpio.c文件可以找到中断服务函数

void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)

当捕获到上升沿,触发中断,就会进入到这个函数里面
然后就会执行HAL_GPIO_EXTI_Callback(GPIO_Pin)函数,此函数为回调函数,我们打开可以发现前面有个weak。
前面的 __weak 表示此函数为虚函数,需要用户重写的。
在这里插入图片描述
在main.c文件中找个地方重新写一下,在main函数下方插入下面代码。

void HAL_GPIO_EXTI_Callback(
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值