測試stm32串列埠傳送資料在不同條件下的效率

Chao-J發表於2024-11-23

一、測試不同波特率

測試程式碼:

    while(1)
    {
				LED1_ON();
				bsp_uart_Printf("這是一個測試程式%d\r\n", num);
				LED1_OFF();
				bsp_uart_Printf("這是一個測試程式%d\r\n", num);
				num ++;
    }

void bsp_uart_Printf(char *format, ...)
{
	va_list arg;
	va_start(arg, format);
	vsprintf(String, format, arg);
	va_end(arg);
	bsp_uart_SendString(String);
}

分別測試波特率為9600,115200、256000下的效率:

1. 9600:

邏輯分析儀抓到的資料如下:

2. 115200

邏輯分析儀抓到的資料如下:

3. 256000

邏輯分析儀抓到的資料如下:

二、在使用DMA的條件測試上述波特率

    while(1)
    {
        LED1_ON();
        bsp_uart_Printf_DMA("這是一個測試程式%d\r\n", num);
        LED1_OFF();
        bsp_uart_Printf_DMA("這是一個測試程式%d\r\n", num);
        num ++;
    }

void bsp_uart_Printf_DMA(char *format, ...)
{
    while(!u8UartDmaFlag);
        u8UartDmaFlag = 0;
        DMA_ClearFlag(DMA1_FLAG_TC4);						//清除工作完成標誌位
        va_list arg;
        va_start(arg, format);
        vsprintf(String, format, arg);
        va_end(arg);
        DMA_SetCurrDataCounter(DMA1_Channel4, strlen(String));	//寫入傳輸計數器,指定將要轉運的次數
        DMA_Cmd(DMA1_Channel4, ENABLE);						//DMA使能,開始工作
}
void DMA1_Channel4_IRQHandler(void)
{
    u8UartDmaFlag = 1;
    DMA_ClearITPendingBit(DMA1_IT_TC4);
    DMA_Cmd(DMA1_Channel4, DISABLE);					//DMA失能,在寫入傳輸計數器之前,需要DMA暫停工作
}
1. 9600

邏輯分析儀抓到的資料如下:

2. 115200

邏輯分析儀抓到的資料如下:

2. 256000

邏輯分析儀抓到的資料如下:

相關文章