测试stm32串口发送数据在不同条件下的效率

一、测试不同波特率

测试代码:

    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

逻辑分析仪抓到的数据如下:

posted @ 2024-11-23 12:03  Chao-J  阅读(101)  评论(0)    收藏  举报