您的位置 首页 IOT

STM32单片机串口DMA解析

STM32单片机串口DMA解析-STM32有两个DMA控制器(DMA2只存在于大容量产品中),DMA1有7个通道,DMA2有5个通道,每个通道专门用来管理来自于一个或者多个外设对存储器的访问请求。还有一个仲裁器来协调各个DMA请求的优先权。

评论三个问题:1、什么叫串口DMA 恳求;2、串口扼要温习;3、串口DMA发送流程。

1、什么叫串口DMA 恳求(战舰STM32开发板

说这个问题之前先简略回忆DMA的根本特性。先导出原子哥的PPT内容:

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

DMA传输将数据从一个地址空间复制到另一个地址空间。当CPU初始化这个传输动作,传输动作自身是由DMA操控器来完结和完结的。

STM32有两个DMA操控器(DMA2只存在于大容量产品中),DMA1有7个通道,DMA2有5个通道,每个通道专门用来办理来自于一个或许多个外设对存储器的拜访恳求。还有一个裁定器来和谐各个DMA恳求的优先权。

效果:为CPU减负!

下面上图

STM32单片机串口DMA解析

DMA各通道

从外设(TIMx、ADCx、SPIx、I2Cx、和USARTx)发生的DMA恳求,经过逻辑或输入到DMA操控器,这就意味着一起只能有一个恳求有用(在同一时刻,就只能运用其间的一个,其他通道也相似)。外设的DMA恳求,能够经过设置相应的外设寄存器中的操控位,被独立的敞开或封闭。

看到这儿串口DMA恳求的界说就出来了:先举个比方:比方我想用串口发送数据到PC机,一般做法是CPU经过APB1/APB2总线往串口写数据,然后串口发送;或许是CPU经过总线从串口取(读)数据;假如此刻CPU处理的使命十分多,这就会消耗CPU的处理时刻。

而咱们假如用DMA来传送数据那就很快了,DMA会经过自己的特定通道将数据从一个地址空间复制到另一个地址空间,并且不需求CPU的干涉。所以串口DMA恳求的界说是:串口要发送/接纳数据会恳求DMA来完结数据的写和读。(留意这句话只针对本文!)

2、串口扼要温习(库函数)

这儿扼要温习一下战舰STM32串口的知识点。举个比方:我想用PC机往STM32串口发送个数据,然后STM32接纳到后将数据原样回来给PC机(显现在串口调试助手中)。思路:

首要咱们会在串口初始化函数中装备串口接纳中止,当你PC机往串口发送数据时,串口会发生接纳中止;并在中止服务函数中,判别接没接纳完,假如接纳结束就会把接纳状况寄存器的接纳完结标志方位1。到这儿是接纳中止的效果。。

然后在主函数中,咱们不断检测接纳状况寄存器的接纳完结标志,看接没接纳完。假如接纳完了,就经过for循环将接纳到的数据,悉数发给串口的USART_DR寄存器(当向该寄存器写数据时,串口就会主动发送)。所以咱们经过PC机发给串口的数据就会被STM32经过串口发回来了,显现在串口调试助手中。

3、串口DMA发送流程(库函数)

战舰试验:经过按键KEY0来操控DMA发送,每按一次KEY0,DMA就传送一次数据到USART1,然后在TFTLCD模块上显现进展信息。这个现在了解就不难了吧。

从主函数下手,首要咱们在STM32的SRAM中拓荒一段5200(这个数字越大DMA传输越慢,反之越快)字节的空间SendBuff[],作为咱们的存储器(内存),存储要往外设(USART1)发送的数据。

然后咱们在SendBuff[]中写满TEXT_TO_SEND[]里的内容。这儿战舰往SendBuff[]里写的算法十分奇妙,应该学习;

现在SendBuff[]中现已存满了要发送给串口的数据。这时咱们还要检测KEY0有没有按下,假如按下了,就经过两个函数:1、使能串口发送(在STM32库函数stm32f10x_usart.c中,装备USART_CR3中的DMA使能位DMAT);2、使能DMA1通道4,发动传输(在dam.c中,最终也是调用了stm32f10x_dma.c中的DMA_Cmd();函数来使能通道)。加上之前(本文没有)对DMA参数的初始化(初始化存储器和外设基地址等),就能够发动一次传输了。

传输时刻问题:传输时刻跟波特率密切相关。比方波特率是9600,意思便是每秒钟发送或承受的速率为9600bit/s,8bit=1Byte(字节),故当波特率为9600时,串口的传输速率为1200字节每秒。上文咱们请求的存储器(内存)空间是5200字节,故串口要传输完这个巨细的空间内容内容,估计需求5200/1200约4秒多。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/iot/346288.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部