STM32的DMA中FIFO和突发模式理解

这篇具有很好参考价值的文章主要介绍了STM32的DMA中FIFO和突发模式理解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

STM32的DMA中FIFO和突发模式理解
学习stm32DMA时遇到了FIFO和突发配置的疑惑,看手册完全云里雾里,节拍是什么等等都不清楚。
首先理解什么是突发,突发传输就是两个设备进行数据传输,一个设备发数据,一个设备接收数据,或者像是CPU到内存进行读取数据,肯定是每读取一个字节,读取指针就会自增一次,如果每次读一个字节,还要到程序里面执行一个指针自增指令的话,那CPU岂不是时时刻刻都在读取内存然后指针自增指令执行,那也太蠢了,CPU利用率太低了,所以出现了突发模式,我设定为CPU进行读内存,我指定一个宽度,每次读取都读这一个宽度的数据,比如为128B,每次读取,指针会自己增加,读取满了这128B再告诉CPU读了一次,那么这个128B就是一次突发的大小,只是进行简单的封装,突发不管每次传输多少,突发规定的是指针每次增加的单位宽度是多少,就像上面的我读取内存,规定每次读取1280B,那么一次读取就是10次突发,相当于读写指针按每次自增128进行了10次。突发就是这么个意思,是为了方便传输时指针自增进行的优化操作,将每次指针自增由指令控制,封装为硬件突发模式进行。
STM32的DMA中FIFO和突发模式理解
上图就是stm32里面突发和FIFO配置的表。
突发模式一定是与FIFO一起使用的,突发的意思就是打包,而且只针对接收端的配置,与发送端没有关系,这么理解,突发的节拍即按接收端数据宽度作为单位,突发可以选择4、8、16节拍进行打包,跟架子鼓一样,每4秒敲一次,这里就是接收端按接收宽度,每收到4次该宽度作为一次突发,那么就是4节拍一次突发。
如果接收端数据宽度为byte,选择4节拍一次突发,如果将每次突发封装为一个突发包的话,那么就是一个突发包大小为4字节,每次突发发送一个突发包,意思就是每发送4字节即4次接收端的数据宽度,进行一次打包突发,对应到FIFO上面就是,FIFO选择的阈值是满了就发送给接收端,但是一次传输必须是以突发包大小作为单位来进行,所以选择1/4阈值,则满1/4就进行传输,正好满一次突发;按1/2阈值,满1/2传输一次,正好是2个突发包,那么就是传输一次突发两次,以此类推;
所以选择突发计算的是突发包的位宽,即突发包大小=节拍*接收端数据宽度,每次FIFO传输的大小由FIFO自己的阈值决定,但是每次传输的大小一定要大于突发包才行,因为突发包是最小的单位,一次传输内进行几次突发不重要,系统会自己配置,但是需要注意的是,一次FIFO传输必须是整数个突发包的大小宽度,不能切分突发;
突发和数据宽度紧密联系的根本原因,就像是C指针一样,char指针自增是+1,而int* 增长是+4每次,所以突发就跟指针增长一样,是指针增长的封装,
实际例子:
配置突发为4节拍,这是确定一次突发的大小宽度是多少,假如接收端端口数据宽度配置为半字(2B)那么一次突发就是8B,切记一次突发不是一次传输,一次传输包含多次突发,突发本质上是指针增长,即接收端地址自增,每次传输由FIFO决定,FIFO如果选择的阈值为1/4,那么就是说FIFO每装满1个字,就触发传输,传输1个字,但是这里突发的最小单位为8B,而一次传输却是4B,肯定不行。打个比方,我设定指针每自增一次最小增量为8字节,但是现在你却要让指针自增一次只移位4B,肯定不行,因为我已经规定了指针最小的自增长度为8。突发就是这个意思,突发就是为了地址接收数据的同时进行指针偏移,突发包的大小就是指针每次偏移的最小位移,所以FIFO阈值最小只能是1/2,所以一次FIFO传输为1/2*4字=2字=8B的数据,正好一次突发,而3/4又不行,因为3/4阈值FIFO一次传输为12B,而我每次指针自增宽度就是突发包的大小为8B,你说这次传输为12B,我不能是指针自增1.5吧,有见过int * +1.5的么,肯定没有。
最后,还有一点,那就是记住,突发次数是不需要你管的,一次传输有几次突发系统会自动算出来,一次传输的大小一定是有FIFO阈值决定的,你只需要确保,每次传输的大小一定是整数个突发大小就行,每次传输就行几次突发不需要你管。文章来源地址https://www.toymoban.com/news/detail-509003.html

到了这里,关于STM32的DMA中FIFO和突发模式理解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • stm32中DMA的circle和normal模式的区别

    在STM32系列微控制器上,DMA(Direct Memory Access,直接内存访问)是一种用于高效数据传输的重要功能。DMA的Circle(循环)模式和Normal(普通)模式是两种常见的DMA传输模式,它们在数据传输方面有一些区别。 Circle(循环)模式: 在Circle模式下,DMA传输可以循环执行,即在完成

    2024年02月08日
    浏览(28)
  • STM32对SD卡的读、写、擦除操作(SDIO模式)(DMA)

    对于STM32操作SD卡来说,最重要的就算 初始化 、 写操作 、 读操作 、 擦除 这几个操作了。 对于初始化部分上一篇文章已经分析,本篇就主要分析写、读、擦除操作。 本篇函数来自于 STM32提供的例程 。参考野火的程序进行了解释,与野火函数有些不同。 这几种函数完成之后

    2023年04月08日
    浏览(46)
  • (stm32之HAL库)UART工作在DMA模式要打开串口中断吗?

    最近学习了stm32(F4xx)的串口在DMA模式下的使用,期间以ST官方提供的例程进行参考学习,发现其初始化过程中是打开了UART的中断的,而且HAL库中stm32f4xx_hal_uart.c文件中的DMA模式使用说明里也有这么一句话: 即在非循环模式下(也就是发完一次数据就停止的常用模式)需要配置

    2024年02月12日
    浏览(37)
  • 【STM32+HAL+Proteus】系列学习教程---ADC(查询、中断、DMA模式下的电压采集)

    1、学会STM32CubeMX软件关于ADC的配置 2、掌握ADC三种模式(查询、中断、DMA)编程 3、具体目标:1、将开发板单片机采集到的电压值上传至上位机串口调试助手显示。 ADC(Analog to Digital Converter)即模数转换器,用来将模拟信号转换为数字信号。 A/D转换过程 分辨率:  A/D转换器对

    2024年04月26日
    浏览(37)
  • 理解STM32的低功耗模式

    TM32的低功耗模式是特别设计来减少微控制器在不活跃状态下的能耗。这些模式允许STM32在保持核心功能的同时尽可能减少电力消耗,适合用在电池供电或需长期运行的场景。理解各种低功耗模式如何节能,主要包括以下几个方面: 关闭时钟信号 :在微控制器非活跃阶段关闭

    2024年03月18日
    浏览(44)
  • stm32F407学习DAY.14 在DMA模式下进行USART串口数据收发(正点原子例程为例)

    目录 一、DMA配置 1、DMA1和DMA2的请求映射 2、DMA挂载总线 3、DMA相关库函数 ​4、DMA配置过程(以串口1为例) 1)进行时钟使能 2)等待DMA可配置 3)初始化DMA(串口1的TX为DMA2 数据流7 通道4,RX为DMA2 数据流5 通道4) a.DMA外设地址par: b.DMA存储器0地址mar: c.数据传输量ndtr: 4)

    2024年02月04日
    浏览(46)
  • 【STM32】CUBEMX之串口:串口三种模式(轮询模式、中断模式、DMA模式)的配置与使用示例 + 串口重定向 + 使用HAL扩展函数实现不定长数据接收

    目录   总览 使用CUBEMX创建工程的基本配置 CUBEMX中的配置 Keil中的配置 实物连接 串口轮询模式 轮询模式HAL库函数 特点 实验一:发送数据给单片机并让其返回相同值 串口重定向 串口中断模式 在CUBEMX中打开串口中断 中断模式HAL库函数 特点 实验二:使用中断回调完成实验一

    2024年04月10日
    浏览(67)
  • STM32的GPIO端口配置八种模式的理解

    在这张图中,GPIO的配置可以分成8种模式,4种输入,4种输出。 输入分为:模拟输入、浮空输入、上拉输入、下拉输入 输出分为:开漏输出、推挽输出、复用推挽输出、复用开漏输出 模拟输入,一般情况下,用于ADC的采集电压时,配置的输入IO口。在模拟输入中,TTL肖特基触

    2024年01月17日
    浏览(49)
  • 【STM32】HAL库 STM32CubeMX——DMA (串口DMA发送接收)

    软件: STM32CubeMX KEIL5 mcuisp 串口通信助手 硬件: STM32F103C8Tx 杜邦线,面包板,USB转TTL DMA,全称Direct Memory Access,即直接存储器访问。 DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。 我们知道系统的运

    2024年02月12日
    浏览(63)
  • STM32驱动OV7670(无FIFO)相关问题的解决

    之前入手了一块OV7670,直到最近才想着研究研究。首先是直接驱动摄像头显示在LCD上,然后通过串口输出到上位机显示。发现用了串口之后,串口占用CPU时间过长,导致图像刷新就很慢,于是用了DMA与串口进行改进。 后来听说HAL库扩展性很好,而且官方已经停止维护标准库了

    2023年04月08日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包