打印
[研电赛技术支持]

GD32F350 UART0 DMA控制数据发送

[复制链接]
1242|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2024-3-12 12:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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

使用特权

评论回复
沙发
申小林一号| | 2024-4-30 16:54 | 只看该作者
非常不错的帖子,值得推广扩散!!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1931

主题

15613

帖子

12

粉丝