打印
[应用相关]

DMA的配置流程你清楚吗?

[复制链接]
382|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
598330983|  楼主 | 2023-4-26 22:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面是使用HAL库配置DMA的基本流程:
  • 配置DMA传输通道
首先,需要使用HAL库提供的HAL_DMA_Init函数初始化DMA传输通道,然后配置传输通道的参数,例如传输方向、数据宽度、传输模式、传输速率等。这些参数可以通过DMA_HandleTypeDef结构体进行设置。
DMA_HandleTypeDef hdma;
/* Initialize DMA */
hdma.Instance = DMA1_Stream7;
hdma.Init.Channel = DMA_CHANNEL_1;
hdma.Init.Direction = DMA_MEMORY_TO_PERIPH;
hdma.Init.PeriphInc = DMA_PINC_DISABLE;
hdma.Init.MemInc = DMA_MINC_ENABLE;
hdma.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
hdma.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
hdma.Init.Mode = DMA_NORMAL;
hdma.Init.Priority = DMA_PRIORITY_HIGH;
hdma.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
hdma.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;
hdma.Init.MemBurst = DMA_MBURST_SINGLE;
hdma.Init.PeriphBurst = DMA_PBURST_SINGLE;

if (HAL_DMA_Init(&hdma) != HAL_OK) {
  /* Initialization Error */
  Error_Handler();
}
  • 配置DMA中断
如果需要使用DMA传输完成后触发中断,则需要使用HAL库提供的HAL_DMA_RegisterCallback函数注册DMA中断处理函数,例如:
/* Register DMA callback function */
HAL_DMA_RegisterCallback(&hdma, HAL_DMA_XFER_CPLT_CB_ID, DMA_TransferComplete);
其中,DMA_TransferComplete是用户定义的中断处理函数。
  • 关联DMA通道和外设
在DMA传输过程中,需要将DMA通道与外设关联起来,以便DMA传输数据到外设。可以使用HAL库提供的__HAL_LINKDMA宏将DMA通道与外设关联起来,例如:
/* Associate the DMA handle with the I2C1 handle */
__HAL_LINKDMA(&hi2c1, hdmatx, hdma);
其中,hi2c1是外设的句柄,hdmatx是DMA通道的句柄。
  • 启动DMA传输
最后,使用HAL库提供的DMA传输函数启动传输,例如:
if (HAL_I2C_Mem_Write_DMA(&hi2c1, address, reg, 1, data, 1) != HAL_OK) {
  /* Transfer Error */
  Error_Handler();
}
其中,HAL_I2C_Mem_Write_DMA函数会将数据缓存区的数据通过DMA传输到指定地址中。

这是基本的DMA配置流程,需要根据具体的应用场景和硬件平台进行调整和优化。在配置DMA传输时,还需要注意DMA缓存区的设置、DMA传输长度的限制、中断处理函数的编写等问题。

使用特权

评论回复
沙发
Pulitzer| | 2024-6-11 07:06 | 只看该作者

通过访问寄存器来控制I2C1工作时钟的开启。

使用特权

评论回复
板凳
童雨竹| | 2024-6-11 09:02 | 只看该作者

这种方法可以使散热体积和表面面积增大两倍多

使用特权

评论回复
地板
Wordsworth| | 2024-6-11 10:05 | 只看该作者

I2C1工作时钟源选择;I2C1模块工作时钟的开启使能。

使用特权

评论回复
5
Clyde011| | 2024-6-11 11:08 | 只看该作者

STM32芯片中有多个工作时钟源的外设很常见

使用特权

评论回复
6
公羊子丹| | 2024-6-11 12:01 | 只看该作者

功率开关漏极(或集电极)

使用特权

评论回复
7
万图| | 2024-6-11 13:04 | 只看该作者

CPU借助于APB总线访问相关寄存器达到对I2C1工作模块的控制

使用特权

评论回复
8
Uriah| | 2024-6-11 14:07 | 只看该作者

ART2固定使用PCLK时钟,只有开启和关闭的问题,不存在其它时钟源选择

使用特权

评论回复
9
帛灿灿| | 2024-6-11 16:03 | 只看该作者

控制模块的时钟仍然由外设时钟PCLK提供

使用特权

评论回复
10
Bblythe| | 2024-6-11 17:06 | 只看该作者

USART1可以有多个时钟源

使用特权

评论回复
11
周半梅| | 2024-6-11 19:02 | 只看该作者

要把纹波电流平均分布

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

249

主题

5397

帖子

22

粉丝