如题,我碰到了一个奇怪的问题。在用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的设置决定了每次发送多少个数据。那我这个配置为何不对呢?请高手指教! |