771|6

1

帖子

0

TA的资源

一粒金砂(初级)

 

使用GD32F407RET6 USART5 DMA收发数据 [复制链接]

如题,现在DMA 发送数据没问题,但就是单片机收不到数据,使用Jlink Debug无法进入接收中断。现在把整个代码贴出来,希望大佬或前辈能帮忙找找原因,

通过手册 把发数据解决了,但收数据搞了一天,没搞定。谢谢 希望得到指点,若帮忙解决,微信加好友有偿感谢。

USART.zip

8.87 MB, 下载次数: 3

此帖出自GD32 MCU论坛

最新回复

GD 4系列的板子我就没有,干看看不出来   详情 回复 发表于 2023-5-18 09:55
 
 

回复

9325

帖子

24

TA的资源

版主

 

你先用轮询试试能不能读到数据


此帖出自GD32 MCU论坛
 
 
 

回复

1029

帖子

24

TA的资源

纯净的硅(高级)

 
你自己应该把关键代码列出来,而不是放个压缩包,没人会下载你的压缩包的。
此帖出自GD32 MCU论坛
 
 
 

回复

1029

帖子

24

TA的资源

纯净的硅(高级)

 
你直接查看USART1->DR寄存器,看有最新的数据么,如果这个寄存器没数据说明串口本身配置的不对,如果这个数据有,那说明DMA配置的不对。
此帖出自GD32 MCU论坛
 
 
 

回复

1029

帖子

24

TA的资源

纯净的硅(高级)

 

    rcu_periph_clock_enable(RCU_DMA0);
    
    dma_parameter_struct dma;
    //DMA接收配置
    dma.direction=DMA_PERIPHERAL_TO_MEMORY;            //方向        外设至内存
    dma.memory_addr=(uint32_t)&ModbusRecBuffer[0];    //内存地址    modbus缓冲区
    dma.memory_inc=DMA_MEMORY_INCREASE_ENABLE;        //内存增长    启用
    dma.memory_width=DMA_MEMORY_WIDTH_8BIT;            //内存宽度    8位
    dma.number=MODBUS_REC_BUFFER_LEN;                //接收最大数量    300字节
    dma.periph_addr=(uint32_t)&USART_DATA(USART0);                //外设地址    串口1,数据寄存器
    dma.periph_inc=DMA_PERIPH_INCREASE_DISABLE;        //外设增长    否,固定
    dma.periph_width=DMA_PERIPHERAL_WIDTH_8BIT;        //外设宽度    8位
    dma.priority=DMA_PRIORITY_MEDIUM;                    //优先级    
    
    dma_init(DMA0,DMA_CH4,&dma);
    dma_channel_enable(DMA0,DMA_CH4);
    
    usart_dma_transmit_config(USART0,USART_DENR_ENABLE);        //dma接收中断

    //usart_interrupt_enable(USART0,USART_INT_RBNE);            //接收中断    

 

void USART1_IRQHandler(void){        //串口1收发中断 modbus
    //    USART_FLAG_ORERR /USART_FLAG_RBNE
    //USART_FLAG_ORERR 数据未能来得及接收,有丢失的字节
    if(usart_flag_get(USART1,USART_FLAG_RT)){
        usart_flag_clear(USART1,USART_FLAG_RT);
        dma_channel_disable(DMA0,DMA_CH5);
        if(ModbusRecBuffer[0]==MODBUS_ADDR && MODBUS_REC_BUFFER_LEN-dma_transfer_number_get(DMA0,DMA_CH5)>=7){        //modbus至少7字节
            ModbusRecReady=1;
            UartReady[1]=1;
        }
        dma_transfer_number_config(DMA0,DMA_CH5,MODBUS_REC_BUFFER_LEN);
        dma_channel_enable(DMA0,DMA_CH5);
    }
}

此帖出自GD32 MCU论坛
 
 
 

回复

1029

帖子

24

TA的资源

纯净的硅(高级)

 

这是我用的GD32F303的DMA接收代码,你可以参考下。

此帖出自GD32 MCU论坛
 
 
 

回复

3986

帖子

0

TA的资源

版主

 

GD 4系列的板子我就没有,干看看不出来

此帖出自GD32 MCU论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2023 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表