gd32f4 串口1 dma发送,数据发送不了不知道什么地方配置错了

[复制链接]
 楼主| miyuhao 发表于 2025-3-29 20:57 | 显示全部楼层 |阅读模式
void usart1_init(uint32_t bound)
{
    rcu_periph_clock_enable(RCU_GPIOA);     /* 使能GPIOA时钟 */
    rcu_periph_clock_enable(RCU_USART1);    /* 使能串口时钟 */

    gpio_af_set(GPIOA, GPIO_AF_7, GPIO_PIN_2);
    gpio_af_set(GPIOA, GPIO_AF_7, GPIO_PIN_3);

    gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_2);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_2);
    gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_3);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_3);

    usart_deinit(USART1);                                 /* 复位USART0 */
    usart_baudrate_set(USART1, bound);                    /* 设置波特率 */
    usart_stop_bit_set(USART1, USART_STB_1BIT);           /* 一个停止位 */
    usart_word_length_set(USART1, USART_WL_8BIT);         /* 字长为8位数据格式 */
    usart_parity_config(USART1, USART_PM_NONE);           /* 无奇偶校验位 */
    usart_transmit_config(USART1, USART_TRANSMIT_ENABLE); /* 使能发送 */
    usart_receive_config(USART1, USART_RECEIVE_ENABLE);   /* 使能接收 */
    usart_enable(USART1);                                        /* 使能串口 */
}
void uart1_dma_config(void)
{     
     dma_single_data_parameter_struct dma_init_struct;
     rcu_periph_clock_enable(RCU_DMA0);
     dma_deinit(DMA0, DMA_CH6);                                       //DMA0通道6串口1发送配置
     dma_init_struct.direction = DMA_MEMORY_TO_PERIPH;
     dma_init_struct.memory0_addr = (uint32_t)buffer;
     dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE;
     dma_init_struct.periph_memory_width = DMA_PERIPH_WIDTH_8BIT;
     dma_init_struct.number = BUFFER_SIZE;
     dma_init_struct.periph_addr = (uint32_t)&USART_DATA(USART1);
     dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
     dma_init_struct.priority = DMA_PRIORITY_ULTRA_HIGH;
     dma_single_data_mode_init(DMA0, DMA_CH6,&dma_init_struct);
     /* configure DMA mode */
     dma_circulation_disable(DMA0, DMA_CH6);
     dma_channel_subperipheral_select(DMA0, DMA_CH6, DMA_SUBPERI4);
     usart_dma_transmit_config(USART1, USART_TRANSMIT_DMA_ENABLE);     //使能串口1 DMA发送         
}



elephant00 发表于 2025-4-17 11:38 | 显示全部楼层
估计是USART1 初始化问题。
两只袜子 发表于 2025-4-17 11:38 | 显示全部楼层
DMA 配置问题吧
jcky001 发表于 2025-4-17 11:39 | 显示全部楼层
检查硬件连接。
cr315 发表于 2025-4-17 14:00 | 显示全部楼层
buffer 和 BUFFER_SIZE 未定义,可能导致编译错误或运行时错误。
cxm98 发表于 2025-4-18 09:34 | 显示全部楼层
使用dma_channel_enable()使能dma发送通道
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

6

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

1

主题

6

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部