STM32之DMA:
typedef struct
{
__IO uint32_t CCR; //复位
__IO uint32_t CNDTR; //传输的数据量
__IO uint32_t CPAR; //外设地址
__IO uint32_t CMAR; //存储器地址
} DMA_Channel_TypeDef;
用二维数组做DMA缓冲的串口发送:
发送函数先送到指定的二维缓冲数组中;
在定时回调函数里面看如果数组的前2个字节(长度信息不为0),就将其该数组的地址和长度信息给DMA的相关配置寄存器即启动DMA发送
DMA的buf与BURST:
对于STM32F4来讲,每个DMA stream都有4个字的FIFO可用。它用来暂存来自DMA源端的数据,每当FIFO里存放的数据达到设定的阈值后,数据就会被移走。阈值可以设置为从1个字到4个字的深度。启用DMA的FIFO可以最大程度地避免数据传输过程中的溢出问题,可以减少DMA对内存的访问次数从而减少总线访问竞争,通过BURST分组传输优化传输带宽以提升芯片性能。利用FIFO,通过对源端/目标端的数据进行打包或拆包以适应不同数据宽度的访问需求.让DMA的使用更为方便灵活.
FIFO阈值设置为1/4满,自源端的4个Byte被封装成1个word字。数据会按字方式逐一写入内存.传输过程中如果发生被打断的情况,此时就会遇到数据损坏的风险。因此就引入了DMA BURST传输,或称DMA节拍传输.
即几个数据【4/8/16】被封装成1组,或称1个burst,或称1节.对于每1节内的数据传输,DMA对总线的占用不会被总线矩阵仲裁器解除或打断,以保证每节数据的可靠完成。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2017-12-27 CD4051的切换时间
2017-12-27 C8051F单片机定时器的定时