STM32F1系列学习总结:对DMA学习(标准库方式)

*学习路线指引*:

1.DMA功能介绍

2.DMA的配置

一、我的学习认知程度--DMA功能介绍

        DMA能实现一个地址下的数据,硬件自动搬运到另一个地址下,实现硬件全自动化,无需软件干预,即减轻CPU的负担。

二、我的学习认知程度--DMA的配置

结合代码理解:

// 定义接收缓冲区大小
#define BUFFER_SIZE 1

// 定义接收缓冲区
uint8_t rx_buffer[BUFFER_SIZE];

void DMA_Configuration(void) {
    DMA_InitTypeDef DMA_InitStructure;

    // DMA配置
    DMA_DeInit(DMA1_Channel3);
    DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t) & (USART3->DR); // USART3数据寄存器地址
    DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)rx_buffer; // 存储接收数据的内存地址
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
    DMA_InitStructure.DMA_BufferSize = BUFFER_SIZE; // 接收缓冲区大小
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
    DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; // 设置为循环模式
    DMA_InitStructure.DMA_Priority = DMA_Priority_High;
    DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
    DMA_Init(DMA1_Channel3, &DMA_InitStructure);
	
		// 使能USART3的DMA接收
    USART_DMACmd(USART3, USART_DMAReq_Rx, ENABLE);

    // 使能DMA1_Channel3
    DMA_Cmd(DMA1_Channel3, ENABLE);
}

代码有详细介绍。

这里提一下DMA的启动条件:

1.有触发源。 //  USART33使能并且打通通道DMA1_Channel3让触发源USART_DMAReq_Rx触发DMA请求。

2.搬运量不为0。

3.DMA使能。

三.总结

最后,总结一下:

尽可能利用DMA来做一些大量的、重复的工作,来最大限度减轻CPU的负担。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值