打印
[技术问答]

HC32F460的DMA串口发送为啥每次只能发一个字节?

[复制链接]
2030|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
axman002|  楼主 | 2022-9-3 11:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题,我碰到了一个奇怪的问题。在用DMA做定时串口数据发送时,本意是想每次传输8个字节一帧的数据,但是实际却是每次只发送一个字节,一帧的8个字节数据实际分了8次才收到!我的DMA设置代码如下:
/* Initialize DMA. */
    MEM_ZERO_STRUCT(stcDmaInit);  //
    stcDmaInit.u16BlockSize = 8u; /* 1 block */  //设置每次DMA传输的数据量,即块的大小
    stcDmaInit.u16TransferCnt = 0;       //传输次数。填0表示无限次传输
    stcDmaInit.u32DesAddr = (uint32_t)(&M4_USART3->DR);
    stcDmaInit.u32SrcAddr = (uint32_t)MSG;     /* 源地址数组. */
    stcDmaInit.u16DesRptSize=0;                   //目标地址固定
        stcDmaInit.u16SrcRptSize = 8;                 //源地址重复区域为8个字节

        stcDmaInit.stcDmaChCfg.enDesInc = AddressFix;
    stcDmaInit.stcDmaChCfg.enSrcInc = AddressIncrease;  /* Set destination address mode. *///
    stcDmaInit.stcDmaChCfg.enLlpEn = Disable;
        stcDmaInit.stcDmaChCfg.enDesRptEn = Disable;
        stcDmaInit.stcDmaChCfg.enSrcRptEn = Enable;   

    stcDmaInit.stcDmaChCfg.enTrnWidth = Dma8Bit;   /* Set data width 8bit. */

    DMA_InitChannel(M4_DMA1, DmaCh0, &stcDmaInit);
按照用户手册的说法,BLOCKSIZE的设置决定了每次发送多少个数据。那我这个配置为何不对呢?请高手指教!

使用特权

评论回复
沙发
littlelida| | 2022-9-3 14:26 | 只看该作者
这是按照例程弄的么

使用特权

评论回复
板凳
axman002|  楼主 | 2022-9-3 21:58 | 只看该作者
littlelida 发表于 2022-9-3 14:26
这是按照例程弄的么

嗯,参考官方程序写法。我的本意是用定时器来驱动DMA每0.5S发送一帧8个字节数据。但是实际程序写起来才发现不管我咋设置,都只能做到每0.5S发送一个字节数据,要4S才能发完全部8个字节。这不是我想要的啊!求助如何每次触发DMA都能发8个字节呢?

使用特权

评论回复
地板
axman002|  楼主 | 2022-9-5 09:19 | 只看该作者
u16BlockSize这个参数按照手册上的说法,难道不是指每次发送数据量吗?

使用特权

评论回复
5
carpsnow| | 2022-9-10 13:36 | 只看该作者
怎么回事?难道不是每次发一个字节么

使用特权

评论回复
6
weifeng90| | 2022-9-11 13:58 | 只看该作者
串口一次是发送一个字节啊

使用特权

评论回复
7
redone| | 2022-9-12 09:31 | 只看该作者
等结果~

使用特权

评论回复
8
Bowclad| | 2022-9-16 19:21 | 只看该作者
不是一次发一个字节吗?

使用特权

评论回复
9
ZJZNIXNJJ| | 2023-8-31 13:40 | 只看该作者
你好我也在做HC32F460DMA串口通信可以交流一下吗?我的qq2845440409

使用特权

评论回复
10
langgq| | 2023-8-31 19:42 | 只看该作者
官方例程肯定没问题的

使用特权

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

本版积分规则

11

主题

36

帖子

0

粉丝