一、测试不同波特率
测试代码:
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
逻辑分析仪抓到的数据如下:
标签:DMA,va,uart,串口,bsp,stm32,num,arg,发送数据 From: https://www.cnblogs.com/chaoj/p/18564299