axman002 发表于 2022-9-3 11:14

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

如题,我碰到了一个奇怪的问题。在用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这个参数按照手册上的说法,难道不是指每次发送数据量吗?

carpsnow 发表于 2022-9-10 13:36

怎么回事?难道不是每次发一个字节么

weifeng90 发表于 2022-9-11 13:58

串口一次是发送一个字节啊

redone 发表于 2022-9-12 09:31

等结果~

Bowclad 发表于 2022-9-16 19:21

不是一次发一个字节吗?

ZJZNIXNJJ 发表于 2023-8-31 13:40

你好我也在做HC32F460DMA串口通信可以交流一下吗?我的qq2845440409

langgq 发表于 2023-8-31 19:42

官方例程肯定没问题的
页: [1]
查看完整版本: HC32F460的DMA串口发送为啥每次只能发一个字节?