本文主要介绍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(