目录
一、中断介绍
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.采用串口中断方式实现串口通信。
中断通常被定义为一个事件,该事件能够改变处理器执行指令的顺序。这样的事件与 CPU 芯片内外部硬件电路产生的电信号相对应。
中断分为同步中断和异步中断。
同步中断——同步中断是当指令执行时由 控制单元产生的,之所以称为同步,是因为只有在一条指令终止执行后 CPU 才会发出中断。
异步中断——异步中断是由其他硬件设备依照 CPU 时钟信号随机产生的。
通常我们所说的中断指的是异步中断,我们将同步中断称为异常。(异常是由程序的错误产生的,或者是由内核必须处理的异常条件产生的)
跟据中断的定义,我们可以通过中断使处理器转而去优先运行正常控制流之外的代码。
当一个中断信号达到时,CPU 必须停止它当前正在做的事情,并且切换到一个另一个活动。为了做到这就要在内核态堆钱保存程序计数器的当前值,并把与中断类型相关的地址放进程序计数量。
中断处理是由内核执行的最敏感的任务之一,因为它必须满足下列约束:
1)中断应该被尽可能快地处理完。
2)中断处理程序必须编成使相应的内核控制路径能以嵌套的方式执行。
3)内核在处理一个中断时,可接受新的中断。但存在一个临界区,中断必须被禁止。
出于1)和3)的约束,中断的设计一般将中断处理程序分为两部分执行(即上半部和下半部函数)。上半部为中断被禁止的临界区,执行关键而紧急的任务,如把接收到的帧拷贝到输入队列,以便下半部函数执行时能进行处理。
用stm32F103芯片的GPIOA端一管脚接一个LED,GPIOB端口一引脚接一个开关(用杜邦线模拟代替)。采用中断模式编程,当开关接高电平时,LED亮灯;接低电平时,LED灭灯。
这里我选用的芯片为正点原子的STM32F103RC迷你板。
设置PA1端接开关,PB5接LED。
对于按键电路,设置上拉式按键
LED灯的触发方式
因此这里设置上升沿触发,即松开按键时灯亮,因为题目要求为开关接高高电平亮灯。
新建工程的过程在这我就不赘述了,需要的朋友可以看看我的另一篇博客
基于STM32 CubeMX+MDK5使用HAL库点亮流水灯,并使用逻辑分析仪观察管脚时序波形_歪比巴不的博客-CSDN博客
配置RCC使用外部时钟
然后再来配置stm32的时钟树框图,将8改为72,回车确认
再按着顺序继续配置
点击GPIO,选择自己用到的管脚,这里我的LED是连在PA8管脚,按键是连在PB8
连接LED的管脚选择GPIO_Output
对于LED对应的PA8管脚,默认设置即可,名字设为LED
按键所连的管脚选择GPIO_EXIT
对于按键对应的管脚,我这里让默认输入为0,选择pull down,选择上升沿触发
使能对应的外部中断
代码如下:
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);
}
在如图位置粘贴代码
LED短脚接地,长脚接PB8,按键一端接3.3V,一端接PB8
LED短脚——GND
LED长脚——PA8
按键一端——3.3V
按键另一端——PB8
完成一个STM32的USART串口通讯程序,要求:
1)设置波特率为115200,1位停止位,无校验位;
2)STM32系统给上位机(win10)连续发送“hello windows!”。win10采用“串口助手”工具接收。
由于新工程配置大多如上方led灯示例,所以以下只讲述不同之处
USART1中的Mode选择Asynchronous
使能中断
添加存放数据的数组
uint8_t a[]="Hello windows!\n";
添加回转函数
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
HAL_UART_Transmit_IT(&huart1, a, sizeof(a));
}
在主函数中添加中断调用
HAL_UART_Transmit_IT(&huart1, a, sizeof(a));
中断详解(一)——基本概念_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