STM32-DMA传输实验(寄存器版)

接上文https://blog.csdn.net/staypt/article/details/129131822?spm=1001.2014.3001.5502

在USART串口的基础上,使用DMA进行储存器到外设的数据传输实验

  1. 在串口初始化的基础上,开启DMA收发使能:DMAT和DMAR

void USART_GPIO_INIT(void)
{
SET_BIT(RCC->APB2ENR,(1<<2));//开GPIOA端口时钟
SET_BIT(RCC->APB2ENR,RCC_APB2ENR_USART1EN);//开串口时钟
    SET_BIT(GPIOA->CRH,(0x4<<8));//RX,接收,浮空输入
SET_BIT(GPIOA->CRH,(0xB<<4));//TX,发送,推挽复用
USART1->CR1=0x0;
USART1->CR2=0x0;
USART1->CR3=0x0;
USART1->BRR=0x271;//波特率设置
 NVIC_DisableIRQ(USART1_IRQn);//关中断
 SET_BIT(USART1->CR1,USART_CR1_RXNEIE);//设置RXNE中断
 NVIC_SetPriority(USART1_IRQn,1);
 NVIC_EnableIRQ(USART1_IRQn);//开中断
 
 SET_BIT(USART1->CR3,USART_CR3_DMAT);
 SET_BIT(USART1->CR3,USART_CR3_DMAR);//开串口DMA收发使能
 
 SET_BIT(USART1->CR1,USART_CR1_TE);//开串口
 SET_BIT(USART1->CR1,USART_CR1_RE);
 SET_BIT(USART1->CR1,USART_CR1_UE);
}
  1. 配置DMA初始化代码

这里USART所在通道为Channel4,将外设地址设置为DR收发寄存器,储存器地址为自己定义的数组uint8_t sendcom[buffer]; 其中buffer这里设置成5000

配置DMA的步骤在芯片手册中一般都有提及:

void USART_DMA_INIT(void)
{
    SET_BIT(RCC->AHBENR, RCC_AHBENR_DMA1EN);//开DMA时钟
    CLEAR_BIT(DMA1_Channel4->CCR,DMA_CCR1_EN);//清除使能
    DMA1_Channel4->CCR = 0;//初始化
    DMA1_Channel4->CPAR = (uint32_t) & USART1->DR;//外设地址设置为数据寄存器TDR
    DMA1_Channel4->CMAR = (uint32_t) & sendcom;//储存器地址设置为内部flash
    DMA1_Channel4->CNDTR= buffer;
    SET_BIT(DMA1_Channel4->CCR,DMA_CCR1_PL);//通道优先级
    SET_BIT(DMA1_Channel4->CCR,DMA_CCR1_DIR);//方向,储存器到外设
    SET_BIT(DMA1_Channel4->CCR,DMA_CCR1_MINC);//内存地址增量模式
    SET_BIT(DMA1_Channel4->CCR,DMA_CCR1_EN);//开启DMA通道
}
  1. 主函数

在开始DMA传输之前,先使用for循环填充数组内容,这里全部填充为’p’

int main(void)
{
    /***填充数组****/
    uint16_t i;
    for(i=0;i<buffer;i++)
    {
        sendcom[i]='p';
    }
    
    
    USART_GPIO_INIT();
    USART_DMA_INIT();
    

    while(1)
    {
        
    }
    
}

  1. 打开串口,复位之后,显示效果:

串口能够正常接收到单片机通过DMA通道传输的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值