STM32中断和DMA通信编程

本文介绍了基于STM32的中断和DMA通信编程,包括实验要求、DMA原理、STM32中断设置、串口DMA发送数据的实现。通过实验,作者深入理解了中断和DMA的工作机制,并使用STM32CubeMX与HAL库简化了编程流程。
摘要由CSDN通过智能技术生成

目录

一、实验的要求

二、DMA

三、实验过程:

1、CubeMX工程

四、串口中断方式:

中断的介绍:

 中断的作用:

中断的优先级:

2、工程设置:

 五、HAL库UART函数库介绍:

六、串口DMA方式向上位机发送数据 

七、实验总结:

八、参考文献:


一、实验的要求

学习stm32中断、DMA通信原理和编程方法。使用stm32tubemx和HAL库分别完成以下编程练习:

  1. 用stm32F103核心板的GPIOA端一管脚接一个LED,GPIOB端口一引脚接一个开关(用杜邦线模拟代替)。采用中断模式编程,当开关接高电平时,LED亮灯;接低电平时,LED灭灯。

  1. 采用串口中断方式重做上周的串口通信作业。

  1. STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据。

二、DMA

DMA,全称Direct Memory Access,即直接存储器访问。

DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。

系统运作的核心就是CPU,只要给两种外设提供一条数据通路,直接让数据由A拷贝到B 不经过CPU的处理。

DMA用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU的干预,通过DMA数据可以快速地移动。这就节省了CPU的资源来做其他操作。

DMA的作用就是实现数据的直接传输,而去掉了传统数据传输需要CPU寄存器参与的环节,主要涉及四种情况的数据传输,但本质上是一样的,都是从内存的某一区域传输到内存的另一区域(外设的数据寄存器本质上就是内存的一个存储单元):

  • 外设到内存

  • 内存到外设

  • 内存到内存

  • 外设到外设

DMA的特征:

在同一个DMA模块上,多个请求间的优先权可以通过软件编程设置(共有四级:很高、高、中等和低),优先权设置相等时由硬件决定(请求0优先于请求1,依此类推); 独立数据源和目标数据区的传输宽度(字节、半字、全字),模拟打包和拆包的过程。源和目标地址必须按数据传输宽度对齐; 支持循环的缓冲器管理; 每个通道都有3个事件标志(DMA半传输、DMA传输完成和DMA传输出错),这3个 事件标志逻辑或成为一个单独的中断请求; 存储器和存储器间的传输、外设和存储器、存储器和外设之间的传输; 闪存、SRAM、外设的SRAM、APB1、APB2和AHB外设均可作为访问的源和目标; 可编程的数据传输数目:最大为65535。

DMA1控制器:

从外设(TIMx[x=1、2、3、4]、ADC1、SPI1、SPI/I2S2、I2Cx[x=1、2]和USARTx[x=1、2、3])产生的7个DMA请求,通过逻辑或输入到DMA1控制器 

DMA2:

从外设(TIMx[5、6、7、8]、ADC3、SPI/I2S3、UART4、DAC通道1、2和SDIO)产生的5个请求,经逻辑或输入到DMA2控制器

DMA的工作模式:

DMA传输时外设对DMA控制器发出请求。 DMA控制器收到请求,触发DMA工作。 DMA控制器从AHB外设获取ADC采集的数据,存储到DMA通道中 DMA控制器的DMA总线与总线矩阵协调,使用AHB把外设ADC采集的数据经由DMA通道存放到SRAM中,这个数据的传输过程中,完全不需要内核的参与,也就是不需要CPU的参与

仲裁器:

仲裁器的作用是确定各个DMA传输的优先级

仲裁器根据通道请求的优先级来启动外设/存储器的访问。

优先权管理分2个阶段:

软件:每个通道的优先权可以在DMA_CCRx寄存器中设置,有4个等级:

最高优先级 高优先级 中等优先级 低优先级; 硬件:如果2个请求有相同的软件优先级,则较低编号的通道比较高编号的通道有较高的优先权。比如:如果软件优先级相同,通道2优先于通道4。

注意: 在大容量产品和互联型产品中,DMA1控制器拥有高于DMA2控制器的优先级。

DMA的工作模式:

DMA传输时外设对DMA控制器发出请求。
DMA控制器收到请求,触发DMA工作。
DMA控制器从AHB外设获取ADC采集的数据,存储到DMA通道中
DMA控制器的DMA总线与总线矩阵协调,使用AHB把外设ADC采集的数据经由DMA通道存放到SRAM中,这个数据的传输过程中,完全不需要内核的参与,也就是不需要CPU的参与

DMA的中断:

每个DMA通道都可以在DMA传输过半、传输完成和传输错误时产生中断。为应用的灵活性考虑,通过设置寄存器的不同位来打开这些中断。

使没开启,我们也可以通过查询这些位来获得当前 DMA 传输的状态。这里我们常用的是 TCIFx位,即数据流 x 的 DMA 传输完成与否标志。

外部中断控制器:

管理23个外部中断线(EXTI Line);

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


三、实验过程:

1、CubeMX工程

进入STMCubeMX,选择新项目:

 点击sys,将debug选项改为Serial Wire:

在RCC里的HSE选择Crystal/Ceramic Resonator<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值