GD32F350的UART0 DMA数据发送
void usart0_dma_config(void)
{
/* 定义一个DMA配置结构体 */
dma_parameter_struct dma_init_struct;
/* 使能 DMA 时钟 */
rcu_periph_clock_enable(RCU_DMA);
/* 初始化 DMA0 通道1 */
dma_deinit(DMA_CH1);
dma_init_struct.direction = DMA_MEMORY_TO_PERIPHERAL; /* 存储器到外设方向 */
dma_init_struct.memory_addr = (uint32_t)txdat; /* 存储器基地址 */
dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE; /* 存储器地址自增 */
dma_init_struct.memory_width = DMA_MEMORY_WIDTH_8BIT; /* 存储器位宽为8位 */
dma_init_struct.number = 4; /* 传输数据个数 */
dma_init_struct.periph_addr = ((uint32_t)(USART0+0X28)); /* 外设基地址,即USART数据寄存器地址 */
dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE; /* 外设地址固定不变 */
dma_init_struct.periph_width = DMA_PERIPHERAL_WIDTH_8BIT; /* 外设数据位宽为8位 */
dma_init_struct.priority = DMA_PRIORITY_MEDIUM; /* 软件优先级为极高*/
dma_init(DMA_CH1, &dma_init_struct);
/* DMA循环模式配置,使用循环模式 */
dma_circulation_enable(DMA_CH1);
/* DMA存储器到存储器模式模式配置,不使用存储器到存储器模式*/
dma_memory_to_memory_disable(DMA_CH1);
/* DMA0 通道1 中断优先级设置并使能 */
//nvic_irq_enable(DMA0_Channel3_IRQn, 0, 0);
/* 使能 DMA0 通道1 传输完成、传输错误中断 */
//dma_interrupt_enable(DMA0, DMA_CH3, DMA_INT_FTF|DMA_INT_ERR);
/* 使能 DMA0 通道1 */
dma_channel_enable(DMA_CH1);
}
之后在程序中使用如下指令开始传输数据:
usart_dma_transmit_config(USART0, USART_TRANSMIT_DMA_ENABLE);
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/liuhfeng21/article/details/136511083
|