一、测试不同波特率
测试代码:
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
逻辑分析仪抓到的数据如下: