一、測試不同波特率
測試程式碼:
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
邏輯分析儀抓到的資料如下: