实验要求:学习stm32中断、DMA通信原理和编程方法。使用stm32tubemx和HAL库分别完成以下编程练习:(1)用stm32F103核心板的GPIOA端一管脚接一个LED,GPIOB端口一引脚接一个开关(用杜邦线模拟代替)。采用中断模式编程,当开关接高电平时,LED亮灯;接低电平时,LED灭灯。(2) 采用串口中断方式重做上周的串口通信作业。(3) STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据。
目录
一、中断相关概念
1、数据传输方式
处理器和外部设备的数据方式总共分为4种,分别是:
- 无条件传输:处理器不必了解内部设备状态,直接进行数据传输,用于一些简单设备。
- 查询方式:CPU通过程序主动读取状态寄存器,了解接口情况,完成相应的数据操作。查询操作需要以较少的时钟周期间隔重复,因此CPU效率较低。
- 中断方式:当CPU进行主程序操作时,外设的数据已存入端口的数据输 入寄存器,或端口的数据输出寄存器已空,此时由外设通过接口电路向CPU发出中断请求信号。CPU在满足一定条件下,暂停执行当前正在执行的主程序,转入 执行相应能够进行输入/输出操作的子程序,待输入/输出操作执行完毕之后,CPU再返回并继续执行原来被中断的主程序。这样,CPU就避免了把大量时间耗 费在等待、查询外设状态的操作上,使其工作效率得以大大提高。
- 直接存储器访问(DMA):处理器内部建立片内外设和内存之间的数据传输通道,传输过程不需要处理器参与。
2、中断概念
中断全过程流程图和执行过程示意图如下:
3、中断的作用
- 速度匹配:可以解决快速的CPU与慢速的外部设备之间传送数据的矛盾。
- 分时操作:CPU可以分时为多个外部设备服务,提高计算机的利用率。
- 实时响应:CPU能够及时处理应用系统的随机事件,增强系统的实时性。
- 可靠性高:CPU可以处理设备故障及掉电等突发事件,提高系统可靠性。
4、中断优先级
处理器根据不同中断的重要程序设置不同的优先等级。不同优先级中断的处理原则是:高级中断可以打断低级中断;低级中断不能打断高级中断。这就形成了一种中断嵌套。
5、STM32中断系统
(1) NVIC
Cortex-M内核的组件,嵌套向量中断控制器,管理所有的中断和异常,为中断源分配中断通道
(2) 中断通道
微控制器片内集成了很多外设,对于单个外设而言,它通常具备若干个可以引起中断的中断源,而该外设的所有中断源只能通过指定的中断通道向内核申请中断。
STM32支持84个中断(16个内部,68个外部);16级可编程的中断优先级设置。
(3) 优先级分组
HAL库初始化函数HAL_Init将优先级设置为4组,从0-15,共16级占优先级。编号越小,优先级越高。
(4) 外部中断控制器
- 管理23个外部中断线(EXTI Line)
- 0~15号外部中断用于由GPIO引脚触发的外部中断
- 16~22号外部中断用于RTC闹钟事件、以太网唤醒事件和USB唤醒事件
- 当对应GPIO引脚与外部中断线连接后,GPIO引脚才具备中断的功能,可以设置外部中断的触发方式。
(5) HAL库的中断处理流程
总体流程如下图
6、串口中断过程
二、中断模式控制LED灯亮灭
1、新建工程与相关配置
打开STM32cubeMX,选择New Project
新建一个工程
在右上角根据自己的芯片信号选