1443|6

2

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

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

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

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

USART.zip

8.87 MB, 下载次数: 4

此帖出自GD32 MCU论坛

最新回复

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

回复
举报

9803

帖子

24

TA的资源

版主

沙发
 

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


此帖出自GD32 MCU论坛
 
 
 

回复

1144

帖子

24

TA的资源

纯净的硅(高级)

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

回复

1144

帖子

24

TA的资源

纯净的硅(高级)

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

回复

1144

帖子

24

TA的资源

纯净的硅(高级)

5
 

    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论坛
 
 
 

回复

1144

帖子

24

TA的资源

纯净的硅(高级)

6
 

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

此帖出自GD32 MCU论坛
 
 
 

回复

4008

帖子

0

TA的资源

版主

7
 

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

此帖出自GD32 MCU论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表