锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

【GD32】GD32E23x_Demo_Suites ,USART_DMA

时间:2022-10-04 15:30:00 e23panasonic传感器

example:

GD32E23x_Demo_Suites_V1.0.1/GD32E230C_EVAL_Demo_Suites/Projects/06_USART_DMA

实现效果:

1.printf("a usart dma function test example!") // USART0打印

2.DMA channel 1, 定义程序txbuffer[ ]内容(存储器)传输到数据发送寄存器USART0_TXDATA(外设),即USART0_TX打印出来

3.DMA channel 2, DMA从外设USART0_RXDATA寄存器(外设)读取内容,读取程序定义rxBuffer[10], 然后用printf打印出来

------------------------------------------------

所以DMA外设的基本操作就是:

定义外设和存储器,初始化DMA结构体, 使能DMA等待传输、检测标志DMA传输完成。

///寄存器地址:外设基地   寄存器偏移地址  /*qyc add, usart0 base 0x40003800, USART_TDATA addr_Offset 0x28*/ #define USART0_TDATA_ADDRESS      ((uint32_t)0x40013828)  /*qyc add, usart0 base 0x40003800, USART_TDATA addr_Offset 0x24*/ #define USART0_RDATA_ADDRESS      ((uint32_t)0x40013824)  

初始化DMA channel 1的例子:

dma_deinit(DMA_CH1); dma_init_struct.direction = DMA_MEMORY_TO_PERIPHERAL; dma_init_struct.memory_addr = (uint32_t)txbuffer; dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE; dma_init_struct.memory_width = DMA_MEMORY_WIDTH_8BIT; dma_init_struct.number = ARRAYNUM(txbuffer);   dma_init_struct.periph_addr = USART0_TDATA_ADDRESS; dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE; dma_init_struct.periph_width = DMA_PERIPHERAL_WIDTH_8BIT; dma_init_struct.priority = DMA_PRIORITY_ULTRA_HIGH; dma_init(DMA_CH1,&dma_init_struct);  /* configure DMA mode */ dma_circulation_disable(DMA_CH1);  dma_memory_to_memory_disable(DMA_CH1);  /* enable DMA channel1 */ dma_channel_enable(DMA_CH1);  usart_dma_transmit_config(USART0, USART_DENT_ENABLE);   /* wait DMA Channel transfer complete */ while(RESET == dma_flag_get(DMA_CH1, DMA_FLAG_FTF));

使能USART的USART_CTRL2寄存器的DMA发送和 DMA接收使能位

//寄存器是USART_CTL2, DENT和DENR位  #define CTL2_DENR(regval)             (BIT(6) & ((uint32_t)(regval) << 6)) #define USART_DENR_ENABLE             CTL2_DENR(1)                 #define USART_DENR_DISABLE            CTL2_DENR(0)        #define CTL2_DENT(regval)             (BIT(7) & ((uint32_t)(regval) << 7)) #define USART_DENT_ENABLE             CTL2_DENT(1)                    #define USART_DENT_DISABLE            CTL2_DENT(0)        usart_dma_transmit_config(USART0, USART_DENT_ENABLE);  usart_dma_receive_config(USART0, USART_DENR_ENABLE);       

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章