STM32 DMA 问题
发布网友
发布时间:2022-04-30 05:28
我来回答
共1个回答
热心网友
时间:2023-10-17 02:08
下面的描述可以帮你理解DMA,具体使用自行查手册,读代码
DMA每一个通道可以视作一个独立的外设, 有一个源地址寄存器(),一个目标地址寄存器,
一个传输次数寄存器,若干控制寄存器
可以将传输过程视作一个额外的cpu在启动之后,开始执行如下代码:
UDdst * pDst; //UDdst可以是 u8 u16 u32 任意
UDsrc * pDst; //UDsrc 可以是 u8 u16 u32
while(TransCNT)
{
if(触发了一次传输) //一般来说指定了特定硬件功能(P2P,P2m,M2P)的话, 触发型号是外设电路给到DMA电路的,有时候启动传输会作为传输过程的第一个触发信号(比如用M2P模式发送若干数据至串口,启动时直接触发一次,后续触发则是传输完成时串口外设电路发送给DMA)
{
*pDst = *pSrc; TransCNT--;
if(源地址自动增 ==true)pSrc++;
if(目标地址自动增==true)pDst++;
}
}
热心网友
时间:2023-10-17 02:08
下面的描述可以帮你理解DMA,具体使用自行查手册,读代码
DMA每一个通道可以视作一个独立的外设, 有一个源地址寄存器(),一个目标地址寄存器,
一个传输次数寄存器,若干控制寄存器
可以将传输过程视作一个额外的cpu在启动之后,开始执行如下代码:
UDdst * pDst; //UDdst可以是 u8 u16 u32 任意
UDsrc * pDst; //UDsrc 可以是 u8 u16 u32
while(TransCNT)
{
if(触发了一次传输) //一般来说指定了特定硬件功能(P2P,P2m,M2P)的话, 触发型号是外设电路给到DMA电路的,有时候启动传输会作为传输过程的第一个触发信号(比如用M2P模式发送若干数据至串口,启动时直接触发一次,后续触发则是传输完成时串口外设电路发送给DMA)
{
*pDst = *pSrc; TransCNT--;
if(源地址自动增 ==true)pSrc++;
if(目标地址自动增==true)pDst++;
}
}