stm32關於串列埠輸出的幾種常用方式
阿新 • • 發佈:2019-01-28
在使用stm32做專案時,我們常常會使用到串列埠除錯,通過串列埠來輸出我們想要看的相關引數值,這樣既方便有快捷。
具體方法有哪些呢,我自己整理了一下,這個也是借鑑別人的用法而已。希望大家可以相互討論學習。
1、使用printf語句通過串列埠輸出我們想要的引數值
具體的用法:使用之前必須包含相應的標頭檔案#include < stdio.h >
int fputc(int ch, FILE *f)//重定向,讓printf輸出到串列埠
{
USART_SendData(USART1, (uint8_t) ch);
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
return ch;
}
使用以上函式那必須在stm32在目標選項中必須勾選Use MicroLIB選項。同時當然需要配置stm32串列埠的相關初始化才可以,這樣就可以使用printf函式來進行串列埠輸出。可以實現在VS下程式設計使用的的printf函式。
2、使用巨集定義的方式進行串列埠輸出,其實與printf函式一樣的,只是變了種形式而已,很方便的呼叫所使用的串列埠。
具體的用法:使用之前必須包含相應的標頭檔案#include< stdio.h >
// 定義除錯串列埠
#define DEBUG_UART UART7
// 是否輸出除錯資訊
#define DEBUG_PRINTF
#ifdef DEBUG_PRINTF
#define debug(FORMAT, ...) printf(FORMAT, ##__VA_ARGS__)
#else
#define debug(FORMAT, ...)
#endif
以上,可在檔案的開始巨集定義相關的內容,之後再用使用以下函式進行輸出內容。同時在配置相關的串列埠內容即可使用除錯串列埠。
int fputc(int ch, FILE *f)//重定向,讓printf輸出到串列埠
{
USART_SendData(DEBUG_UART, (uint8_t) ch);
while (USART_GetFlagStatus(DEBUG_UART, USART_FLAG_TXE) == RESET);
return ch;
}
3、使用串列埠傳送單位元組或多字的資料
/*************************************************
* @函式名稱: USARTx_Send_Byte
* @函式功能: 串列埠單個位元組
* @輸入引數: USARTx: 選擇傳送陣列使用的串列埠號
* byte: 要傳送的陣列首地址
* @輸出引數: 無
* @返回值 : 無
* @其它說明: 無
*************************************************/
void USARTx_Send_Byte(unsigned char byte) //串列埠傳送一個位元組
{
USART_SendData(USARTx, byte); //通過庫函式傳送資料
while( USART_GetFlagStatus(USARTx,USART_FLAG_TC)!= SET);
//等待發送完成。 檢測 USART_FLAG_TC 是否置1;
}
/*************************************************
* @函式名稱: UARTx_Send_Str
* @函式功能: 串列埠傳送字串
* @輸入引數: USARTx: 選擇傳送陣列使用的串列埠號
* *s: 要傳送的陣列首地址指標
* @輸出引數: 無
* @返回值 : 無
* @其它說明: 傳送字串函式應用指標方法
*************************************************/
void UARTx_Send_Str(unsigned char *s)
{
unsigned char i=0; //定義一個區域性變數用來發送字串
while(s[i]!='\0') //每個字串結尾 都是以"\0" 結尾的
{
/*通過庫函式傳送資料*/
USART_SendData(USARTx,s[i]);
/*等待發送完成。檢測 USART_FLAG_TC 是否置1*/
while( USART_GetFlagStatus(USARTx,USART_FLAG_TC)!= SET);
i++; //i++一次
}
}
/*************************************************
* @函式名稱: USART_SendArray
* @函式功能: 串列埠傳送多位元組
* @輸入引數: USARTx: 選擇傳送陣列使用的串列埠號
* buf :要傳送的陣列首地址
* len :要傳送的陣列長度
* @輸出引數: 無
* @返回值 : 無
* @其它說明: 無
*************************************************/
void USART_SendArray(USART_TypeDef* USARTx, u8 *buf, u8 len)
{
u8 t;
for(t=0;t<len;t++)//迴圈傳送資料
{
//等待發送結束
while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)==RESET){};
//傳送資料
USART_SendData(USARTx,buf[t]);
}
//等待發送結束
while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)==RESET);
}