基于HEL库中断开关点灯以及USART串口中断通信

一、中断的介绍

1.中断的定义

中断通常被定义为一个事件,该事件能够改变处理器执行指令的顺序。这样的事件与 CPU 芯片内外部硬件电路产生的电信号相对应。
  中断是指计算机在执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的事件处理程序,待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程。
在这里插入图片描述

中断分为同步中断和异步中断:

同步中断:同步中断是当指令执行时由控制单元产生的,之所以称为同步,是因为只有在一条指令终止执行后 CPU 才会发出中断。

异步中断:异步中断是由其他硬件设备依照 CPU时钟信号随机产生的。

通常所说的中断指的是异步中断,我们将同步中断称为异常。(异常是由程序的错误产生的,或者是由内核必须处理的异常条件产生的)

2.中断的执行过程

中断处理:指CPU响应中断,转入中断处理程序,系统开始处理中断。
中断响应:指CPU收到中断请求后转向相应的事件处理程序。
中断屏蔽:指在中断请求产生后,系统用软件方式有选择地封锁部分中断而允许其余部分中断仍能得到响应。

3.中断的优先级

中断的优先级:
1.多个中断同时出现时,处理器先响应高优先级的中断
2.低优先级中断的ISR执行时,可以被高优先级中断再次打断
3.ISR比App Code拥有更高的执行优先级在这里插入图片描述

4.中断方式使用按键

操作过程中利用杜邦线分别接高低电平代替按键开关。在这里插入图片描述

二、中断方式点灯

1.引脚的分配

PA5引脚作为led灯的输出口,PA5设置为GPIO_Output
PB15为开关的输出口,将PB15设置为GPIO_EXTI15
在这里插入图片描述

2.外设的配置

将引脚命名LD2,初始电平设置为低电平low
在这里插入图片描述
将PB15口的触发方式选择为下降沿触发,引脚名称命名为B1_EXTI
在这里插入图片描述
使引脚对应的外部中断线EXTI Line[15:10]
选择GPIO—NVIC—勾选EXTI Line[15:10]
在这里插入图片描述选择SYS,将debug选为Serial Wire
在这里插入图片描述
选择RCC将HSE改为Crystal/Ceramic Resonator
在这里插入图片描述

3.配置中断的优先级

将Priority Group设置为4bit在这里插入图片描述
EXTI Line[15:10]中的Preemption Priority设置为15
在这里插入图片描述

4.工程文件的配置

选择project manager,工程命名为diandeng
设置保存路径,将IDE改为MDK-ARM在这里插入图片描述

5.代码编写

/* USER CODE BEGIN 4 */ 
 /*
 * @brief EXTI line detection callbacks. 
 * @param GPIO_Pin: Specifies the pins connected EXTI line,
 * @retval None 
 */ 
 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) 
 {
    
 if( GPIO_Pin == B1_EXTI_Pin ) // 判断外部中断源
 {
   
 HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin); // 翻转LD2状态
}
}
/* USER CODE END 4 */

将代码段放入main.c的文件中在这里插入图片描述
编译可知,0 Error(s)没有错误在这里插入图片描述

6.文件的烧录

利用烧录软件FlyMcu对hex文件进行烧录在这里插入图片描述

7.程序运行结果

当开关接高电平时,LED亮灯;接低电平时,LED灭灯
在这里插入图片描述

三、中断方式串口通信

1.HEL库实现串口通信

(1)HEL库的配置

选择RCC,HSE选择外部时钟源
在这里插入图片描述
设置串口,选择USART1,MODE–异步通信,波特率为115200 Bits/s,传输数据长度为8 Bit,GPIO引脚设置 USART1_RX/USART_TX,NVIC Settings 一栏使能接收中断
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
创建文件,选择MDK-ARM格式并打开在这里插入图片描述

(2)代码的编译

当stm32接收到字符“s”时,停止持续发送“hello windows!”; 当接收到字符“t”时,持续发送“hello windows!”的代码如下:

#include "gpio.h"
#include <string.h>

void SystemClock_Config(void);

char c;//指令 0:停止  1:开始
char message[]="hello Windows\n";//输出信息
char tips[]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值