zouleinb 发表于 2023-5-5 17:41:47

uart接受和发送 dma工程

本帖最后由 zouleinb 于 2023-5-5 17:49 编辑

工程用的是实例代码里的uart dma发送和接受。工程希望读到5个字符以后写11个字符出去,结果第一次收到5个字符可以正常发11个字符出去,但第二次收到4个字符就发了11个字符。原因猜测是不是读写在同一片缓冲区,发送以后的最后一个字节,都会被读到。希望我读的数据都是串口工具发出来的


uart代码
#include "main.h"

#include "uart0_DMArx.h"
uint8_t DMARxData;

void Uart0DMA_Config(uint8_t *buffer, uint32_t length)
{
    FL_DMA_ConfigTypeDef DMA_ConfigStruct = {0};


    DMA_ConfigStruct.memoryAddress = (uint32_t)buffer;
    DMA_ConfigStruct.transmissionCount = length - 1;
    FL_DMA_StartTransmission(DMA, &DMA_ConfigStruct, FL_DMA_CHANNEL_1);


}

void Uart0DMA_ConfigTX(uint8_t *buffer, uint32_t length)
{
    FL_DMA_ConfigTypeDef DMA_ConfigStruct = {0};

    DMA_ConfigStruct.memoryAddress = (uint32_t)buffer;
    DMA_ConfigStruct.transmissionCount = length - 1;
    FL_DMA_StartTransmission(DMA, &DMA_ConfigStruct, FL_DMA_CHANNEL_2);
}

void TestDMA_Uart0(void)
{
    FL_DMA_Enable(DMA);

    Uart0DMA_Config(DMARxData, 5);

    FL_UART_EnableRX(UART0);

    while(!FL_DMA_IsActiveFlag_TransferComplete(DMA, FL_DMA_CHANNEL_1));

    FL_DMA_ClearFlag_TransferComplete(DMA, FL_DMA_CHANNEL_1);
      
                TestDMA_Uart0TX();

}

void TestDMA_Uart0TX(void)
{
    uint8_t TestTxData = "TestUart-TX";
    volatile uint8_t tmp08;

    FL_DMA_Enable(DMA);

    Uart0DMA_ConfigTX(TestTxData, 11);

    FL_UART_EnableTX(UART0);

    // 等待最后一字节数据发送完成
    while(FL_UART_IsActiveFlag_TXShiftBuffEmpty(UART0) == FL_RESET) {};

    FL_UART_ClearFlag_TXShiftBuffEmpty(UART0);

}




main 函数
int main(void)
{
    /* Reset of all peripherals, Initializes the Flash inte**ce and the Systick. */

    /* SHOULD BE KEPT!!! */
    MF_Clock_Init();

    /* Configure the system clock */
    /* SHOULD BE KEPT!!! */
    MF_SystemClock_Config();

    /* Initialize FL Driver Library */
    /* SHOULD BE KEPT!!! */
    FL_Init();


    /* Initialize all configured peripherals */
    /* SHOULD BE KEPT!!! */

    MF_Config_Init();

//                TestDMA_Uart0TX();
    while(1)
    {
                        TestDMA_Uart0();
    }

}




实验现象


这个是工程效果,用debug调试发现第二次数值中第一个元素是X,其他4个元素是b,期望有什么方法让5个元素都是b





zouleinb 发表于 2023-5-5 17:45:18

本帖最后由 zouleinb 于 2023-5-5 17:47 编辑

这个是工程效果,用debug调试发现第二次数值中第一个元素是X,其他4个元素是b,期望有什么方法让5个元素都是b

zouleinb 发表于 2023-5-5 17:48:08

这个是工程效果,用debug调试发现第二次数值中第一个元素是X,其他4个元素是b,期望有什么方法让5个元素都是b
页: [1]
查看完整版本: uart接受和发送 dma工程