先上GD32E230的串口DMA代码。
static void uart_dma_init(void)
{
/* enable DMA clock */
rcu_periph_clock_enable(RCU_DMA);
/*configure DMA interrupt*/
// nvic_irq_enable(DMA_Channel1_2_IRQn, 1);
/* initialize DMA channel2 */
dma_deinit(DMA_CH2);
dma_init_struct.direction = DMA_PERIPHERAL_TO_MEMORY;
dma_init_struct.memory_addr = (uint32_t)uart0.rx_array;
dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE;
dma_init_struct.memory_width = DMA_MEMORY_WIDTH_8BIT;
dma_init_struct.number = 0x100;
dma_init_struct.periph_addr = USART0_RDATA_ADDRESS;
dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
dma_init_struct.memory_width = DMA_PERIPHERAL_WIDTH_8BIT;
dma_init_struct.priority = DMA_PRIORITY_ULTRA_HIGH;
dma_init(DMA_CH2, &dma_init_struct);
/* configure DMA mode

本文对比了GD32E230与GD32F103两种型号MCU的串口DMA配置及中断处理差异。GD32E230仅有一个DMA,而GD32F103有多个DMA资源;F103的IDLE中断处理需额外读取数据寄存器。文章还提到了MDKV6编译器中断标志位的注意事项。
最低0.47元/天 解锁文章
4674





