
一、STM32中断 1. 概念 中断是由内核外部产生的,一般由硬件引起,比如外设中断和外部中断等。 2. 中断响应过程 1.中断源发出中断请求2.判断处理器是否允许中断,以及该中断源是否被屏蔽 3.中断优先级排队 4.处理器暂停当前程序,保护断点地址和处理器的当前状态,根据中断类型号,查找中断向量表,转到对应的中断服务程序 5.执行中断服务程序 6.恢复被保护的状态,执行中断返回指令,回到被中断的程序 中断全过程 ![]() 中断分为同步中断和异步中断: 同步中断:同步中断是当指令执行时由控制单元产生的,之所以称为同步,是因为只有在一条指令终止执行后 CPU 才会发出中断。 异步中断:异步中断是由其他硬件设备依照 CPU时钟信号随机产生的。 3. 中断优先级 ![]() 多个中断同时出现时,处理器先响应高优先级的中断 低优先级中断的ISR执行时,可以被高优先级中断再次打断 ISR比App Code拥有更高的执行优先级 二、仿中断高低电平控制LED灯 1. CubeMx 进入STM32CubeMX新建项目 ![]() 检索所需芯片,并完成项目的基础创建 ![]() 点击sys,将debug->Serial Wire ![]() Rcc->HSE->Crystal/Ceramic Resonator ![]() 将PB0选为外部中断触发器,PA2控制led灯的->GPIO_output ![]() ![]() 设置中断触发器B0 ![]() PLLCLK,晶振频率最大值改为72M赫兹 ![]() NVIC设置: ![]() 完成项目生成 Project配置 ![]() Code Generator ![]() 项目生成 ![]() 2. 控制代码编写 打开工程,搜索HAL_GPIO_EXTI_Callback函数: ![]() 弱函数,需要重写 ![]() main.c中编写回调函数
![]() 3. 编译并烧录 ![]() 使用mscuip进行烧录 ![]() 4. 运行结果 ![]() 三、HAL库中断方式进行串口通信 1. CudeMX配置项目 点击sys,将debug->Serial Wire Rcc->HSE->Crystal/Ceramic Resonator A-Z->USART1->Mode ![]() NVIC设置: 完成项目生成 Project配置 ![]() Code Generator 项目生成 2. Keil代码设置 main函数定义缓冲区大小
![]() 2. 定义缓冲区和标志位
![]() 3. 定义接收成功信息
4.while循环发送信息与接收信息
5.定义回调函数
![]() 6. 编译烧录 ![]() 7. 运行效果 ![]() 四、总结 中断方式不必等待数据的传输过程,只需要在每字节数据收发完成后,由中断标志位触发中断,在中断服务程序中放入新的一字节数据或者读取接收到的一字节数据。 提高Cpu的运行效率,可以处理突发事件 ———————————————— 版权声明:Tarbet |
STM32中断响应延迟优化:从NVIC配置到DMA加速的极致性能调优
基于STM32串口中断之缓存区溢出卡死经验分享
基于STM32数组越界异常中断经验分享
基于STM32之数组越界异常中断经验分享
基于STM32连接参数更新进程后导致断连的问题分析
基于STM32连接参数更新进程后导致断连的问题分析
基于STM32的定时器不按设定超时产生中断
基于STM32利用TIMER事件和栈帧体验中断响应经验分享
基于STM32外部中断原理和配置代码经验分享
基于stm32定时器定时中断经验分享