STM32中断原理

目录

一、中断介绍

1.1 什么是中断

1.2 中断的作用

1.3 中断的约束

二、STM32CubeMX中断方式点灯

2.1 项目内容

2.2 工程设置

2.3 代码实操

2.4 硬件连接

2.5 运行效果

三、STM32CubeMX中断串口通信

3.1 项目内容

3.2 工程设置 

3.3 代码实操

3.4 效果展示

 四、参考文献


 

本篇博客内容包括 :

1.介绍STM32中的中断系统。

2.采用中断进行点灯实验。

3.采用串口中断方式实现串口通信。

一、中断介绍

1.1 什么是中断

中断通常被定义为一个事件,该事件能够改变处理器执行指令的顺序。这样的事件与 CPU 芯片内外部硬件电路产生的电信号相对应。

中断分为同步中断异步中断

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

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

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

1.2 中断的作用

跟据中断的定义,我们可以通过中断使处理器转而去优先运行正常控制流之外的代码

当一个中断信号达到时,CPU 必须停止它当前正在做的事情,并且切换到一个另一个活动。为了做到这就要在内核态堆钱保存程序计数器的当前值,并把与中断类型相关的地址放进程序计数量。

1.3 中断的约束

中断处理是由内核执行的最敏感的任务之一,因为它必须满足下列约束:

1)中断应该被尽可能快地处理完
2)中断处理程序必须编成使相应的内核控制路径能以嵌套的方式执行
3)内核在处理一个中断时,可接受新的中断。但存在一个临界区,中断必须被禁止

出于1)和3)的约束,中断的设计一般将中断处理程序分为两部分执行(即上半部和下半部函数)。上半部为中断被禁止的临界区,执行关键而紧急的任务,如把接收到的帧拷贝到输入队列,以便下半部函数执行时能进行处理。

二、STM32CubeMX中断方式点灯

2.1 项目内容

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

这里我选用的芯片为正点原子的STM32F103RC迷你板。

设置PA1端接开关,PB5接LED。

对于按键电路,设置上拉式按键

  • 按键按下,引脚PA1读到低电平
  • 按键释放,引脚PA1读到高电平

LED灯的触发方式

  • 按键按下瞬间,形成下降沿
  • 按键释放瞬间,形成上升沿

STM32中断原理_第1张图片

 因此这里设置上升沿触发,即松开按键时灯亮,因为题目要求为开关接高高电平亮灯。

2.2 工程设置

  • 新建工程

新建工程的过程在这我就不赘述了,需要的朋友可以看看我的另一篇博客

基于STM32 CubeMX+MDK5使用HAL库点亮流水灯,并使用逻辑分析仪观察管脚时序波形_歪比巴不的博客-CSDN博客

  • 时钟设置

配置RCC使用外部时钟

STM32中断原理_第2张图片

然后再来配置stm32的时钟树框图,将8改为72,回车确认 

再按着顺序继续配置

STM32中断原理_第3张图片

  •  外设配置

 点击GPIO,选择自己用到的管脚,这里我的LED是连在PA8管脚,按键是连在PB8

连接LED的管脚选择GPIO_Output

STM32中断原理_第4张图片

 对于LED对应的PA8管脚,默认设置即可,名字设为LED

STM32中断原理_第5张图片

按键所连的管脚选择GPIO_EXIT

 STM32中断原理_第6张图片

 对于按键对应的管脚,我这里让默认输入为0,选择pull down,选择上升沿触发

STM32中断原理_第7张图片

 使能对应的外部中断

STM32中断原理_第8张图片

 

2.3 代码实操

代码如下: 

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
		for(long i = 1;i<72000;i++){}; //消除抖动
		if(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin)==1)
		{
			HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
		}
	__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
}

在如图位置粘贴代码

STM32中断原理_第9张图片

2.4 硬件连接

LED短脚接地,长脚接PB8,按键一端接3.3V,一端接PB8

LED短脚——GND

LED长脚——PA8

按键一端——3.3V

按键另一端——PB8

2.5 运行效果

 

三、STM32CubeMX中断串口通信

3.1 项目内容

完成一个STM32的USART串口通讯程序,要求:
1)设置波特率为115200,1位停止位,无校验位;
2)STM32系统给上位机(win10)连续发送“hello windows!”。win10采用“串口助手”工具接收。

3.2 工程设置 

由于新工程配置大多如上方led灯示例,所以以下只讲述不同之处

USART1中的Mode选择Asynchronous

STM32中断原理_第10张图片

 使能中断

STM32中断原理_第11张图片

3.3 代码实操

添加存放数据的数组 

uint8_t a[]="Hello windows!\n";

 添加回转函数

void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
		HAL_UART_Transmit_IT(&huart1, a, sizeof(a));
}

STM32中断原理_第12张图片

在主函数中添加中断调用 

HAL_UART_Transmit_IT(&huart1, a, sizeof(a));

3.4 效果展示

STM32中断原理_第13张图片

 

 四、参考文献

中断详解(一)——基本概念_Windeal-CSDN博客_中断概述什么是中断    中断通常被定义为一个事件,该事件能够改变处理器执行指令的顺序。这样的事件与 CPU 芯片内外部硬件电路产生的电信号相对应。    中断分为同步中断和异步中断。    同步中断——同步中断是当指令执行时由 控制单元产生的,之所以称为同步,是因为只有在一条指令终止执行后 CPU 才会发出中断    异步中断——异步中 断是由其他硬件设备依照https://blog.csdn.net/windeal3203/article/details/44588205?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163608715316780262593935%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=163608715316780262593935&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-8-44588205.pc_search_result_cache&utm_term=%E4%B8%AD%E6%96%AD%E5%9F%BA%E7%A1%80%E4%BB%8B%E7%BB%8D&spm=1018.2226.3001.4187


【STM32】HAL库 STM32CubeMX教程四---UART串口通信详解_Z小旋-CSDN博客_hal_uart_transmit前言:今天我们学习STM32CubeMX串口的操作,以及HAL库串口的配置,我们会详细的讲解各个模块的使用和具体功能,并且基于HAL库实现Printf函数功能重定向,UART中断接收,本系列教程将HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用所用工具:1、芯片:STM32F407ZET62、STM32CubeMx软件3、IDE: M...https://blog.csdn.net/as480133937/article/details/99073783

你可能感兴趣的:(stm32,单片机,arm)