STM32中断与DMA通信编程


一、实验要求


学习stm32中断、DMA通信原理和编程方法。使用stm32tubemx和HAL库分别完成以下编程练习:
1. 用stm32F103核心板的GPIOA端一管脚接一个LED,GPIOB端口一引脚接一个开关(用杜邦线模拟代替)。采用中断模式编程,当开关接高电平时,LED亮灯;接低电平时,LED灭灯。
2. 采用串口中断方式重做上周的串口通信作业。
3. STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据。


二、实验过程及结果


(一)任务1

1.中断概述

1)中断概念

中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。

在这里插入图片描述

根据中断源的不同,可以把中断分为硬件中断软件中断两大类。
硬件中断分为外部中断和内部中断两类。

  • 外部中断一般是指由计算机外设发出的中断请求,如:键盘中断、打印机中断、定时器中断等。外部中断是可屏蔽的中断,即利用中断控制器可以屏蔽外部设备的中断请求。
  • 内部中断是指因硬件出错(如突然掉电、奇偶校验错等)或运算出错(除数为零、运算溢出、单步中断等)所引起的中断。内部中断是不可屏蔽的中断

软件中断其实并不是真正的中断,它们只是可被调用执行的一般程序。
例如:ROM BIOS中的各种外部设备管理中断服务程序(键盘管理中断、显示器管理中断、打印机管理中断等,)以及DOS的系统功能调用(INT 21H)等都是软件中断。

2)中断过程

按照事件发生的顺序,中断过程包括:
① 中断源发出中断请求;
② 判断当前处理机是否允许中断和该中断源是否被屏蔽;
③ 优先权排队;
④ 处理机执行完当前指令或当前指令无法执行完,则立即停止当前程序,保护断点地址和处理机当前状态,转入相应的中断服务程序;
⑤ 执行中断服务程序;
⑥ 恢复被保护的状态,执行“中断返回”指令回到被中断的程序或转入其他程序。
上述过程中前四项操作是由硬件完成的,后两项是由软件完成的。

在这里插入图片描述

3)中断作用

中断使计算机系统具备应对突发事件的能力,使CPU在运行过程中对外部事件发出的中断请求及时地进行处理,处理完成后又立即返回断点,继续进行CPU原来的工作。

在这里插入图片描述

4)中断优先级

在某一时刻有几个中断源同时发出中断请求时,处理器只响应其中优先权最高的中断源。当处理机正在运行某个中断服务程序期间出现另一个中断源的请求时,如果后者的优先权低于前者,处理机不予理睬,反之,处理机立即响应后者,进入所谓的“嵌套中断”。

在这里插入图片描述
中断优先权的排序按其性质、重要性以及处理的方便性决定,由硬件的优先权仲裁逻辑或软件的顺序询问程序来实现。

5)中断向量

中断处理/服务程序:响应一个特定中断时处理器执行的函数。
中断向量:中断服务程序在内存中的入口地址。
中断向量表:把系统中所有的中断向量集中起来放到存储器的某一区。

在这里插入图片描述

2.STM32微控制器中断系统

1)中断通道

中断:由内核外部产生的,一般由硬件引起,比如外设中断和外部中断等。
异常:通常是内核自身产生的,大多是软件引起的,比如除法出错异常、预取值失败等。

微控制器片内集成了很多外设,对于单个外设而言,它通常具备若干个可以引起中断的中断源,而该外设的所有中断源只能通过指定的中断通道向内核申请中断。

在这里插入图片描述

2)中断优先级

中断优先级:

在这里插入图片描述
优先级分组:

在这里插入图片描述

3)外部中断控制器

① 管理23个外部中断线(EXTI Line);
② 0~15号外部中断线用于由GPIO引脚触发的外部中断;
③ 16~22号外部中断线用于RTC闹钟事件、以太网唤醒事件和USB唤醒事件等;
④ 当对应GPIO引脚与外部中断线连接后,GPIO引脚才具备外部中断的功能,可以设置外部中断的触发方式。

在这里插入图片描述

4)GPIO引脚的外部中断

触发方式:上升沿触发、下降沿触发、双边沿触发

在这里插入图片描述

3.实验思路

1)上拉式按键

① 按键按下,引脚 PB15 读到低电平
② 按键释放,引脚 PB15 读到高电平

2)触发方式

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

4.工程创建

具体过程参考串口通信小试牛刀

基础配置:
点击 File->New Pioject或ACCEE TO MCU SELECTOR,创建新工程
选择 STM32F103C8 芯片,点击 Start Project 进入工程
配置系统调试接口 SYS,选择 Serial Wire
配置外设 RCC ,选择 HSE (外部高速时钟) Crystal/Ceramic Resonator(晶振/陶瓷谐振器)

① 设置LED灯引脚为PA1的输出模式 GPIO_Output,按键引脚为PB15的外部中断模式GPIO_EXIT1

在这里插入图片描述
② LED对应PA1管脚,User Label处设置为LED

在这里插入图片描述
在这里插入图片描述
③ 开关对应PB15管脚,GPIO mode处设置为上升沿触发User Label处设置为 B_EXTI

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 上升/下降沿

在这里插入图片描述

④ 使能外部中断线,点击Enabled

在这里插入图片描述
⑤ 配置中断优先级
(大多数情况下不必设置中断优先级,直接使用中断编号设置的默认中断优先级)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值