stm串列埠函式在某些條件下想要讓其串列埠列印,但是在某些時候不想讓其進行串列埠列印
本例程就是提供了乙個這樣的例程:
1.對串列埠進行初始化配置
void uart_initwbaudrate(void)
2.串列埠中斷函式:
void uart2_irqhandler(void) //串列埠1中斷服務程式
} if(uart_getitstatus(uart2, uart_it_txien) != reset)
}else
}}
3.串列埠傳送函式:
void usart2sendbyte(char *data,u8 len)//傳送乙個位元組 硬體連線選用的為usart2
uart_rx_sta=0;
}
由函式3來進項串列埠資料的列印也是可以的,但是不能讓其在某些時候不列印,本例程想要的結果就是讓其在某些條件之下進行選擇性的列印
4.一下是本次主要講解的函式:
void printf_uart(char *fmt,...)
while(1)
//fuartsend((u8*)&gprintstring[0],length);
va_end(ap);
}
/*在上面的函式中
va_list(va_list是在c語言中解決變參問題的一組巨集)
va_list表示可變引數列表型別,實際上就是乙個char指標fmt
然後是va_start:va_start用於獲取函式引數列表中可變的頭指標
(獲取函式可變引數列表)
1.輸出引數為ap,型別為va_list:
用於儲存函式引數列表中可變引數的頭指標(
即可變引數列表)
2.輸入引數fmt,ap指向fmt後面的引數,
為第乙個引數的前乙個引數,是乙個固定引數
vsprintf((char *)gprintstring, fmt, ap):
送格式化輸出到串中 ,函式說明:
vsprintf()會根據引數fmt 字串來轉換並格式化資料,
然後將結果複製到引數char(*)gprintstring 的字串陣列,
直到出現字串結束('\0')為止.
va_end():va_end用於結束對可變引數的處理。
對於這段**的理解:
printf函式首先定義了乙個char指標fmt,
然後後面緊跟的是printf的變參,那麼變參轉換就開始了,
下乙個函式va_start定義了乙個指向變參的首指標args,
緊接著利用vsprintf函式,按照fmt格式以及通過args指標,
將變參乙個個按照規定好的格式轉換資料,
結果複製到char(*)gprintstring這個陣列中,
最後結束可變引數處理。
這裡我對於fmt這個指標的理解是,定義了乙個指標型別,
轉換結果就是按照這個指標的型別轉換的,
這裡轉換的結果就是將變參轉換成char字元型
就是字串轉換到乙個陣列中
*/
上面的函式在進行串列埠列印時候每次列印乙個字元的,轉化乙個就列印乙個
5.下面的函式為串列埠選擇性列印函式
#define displayatcmd(_x) if (!getconnectedstatus()) do while(0)
上面的函式的選擇性列印為當getconnectedstatus()==0的時候,才會進行do while(0)迴圈,但是為0,所以就會執行一次do後面的語句,因此可以實現選擇性的列印,列印函式為displayatcmd("123456789")
本人也是小白,希望有錯誤的地方大家給指出來,及時修正共同進步
STM32之串列埠
名稱 stm32之串列埠 說明 對於stm32的串列埠通訊來說,從外部看,和c51差不多。從內部看,啊。我還不了解。從使用上說,也是需要先配置usart,然後通過終端或者輪詢的方式接受或者輸出資料。由於有了韌體庫函式的幫助,stm32的串列埠配置起來比c51還要方便不少。本實驗完成的是輸入輸出重定向...
在STM32上移植FreeRTOS
freertos是乙個迷你的實時作業系統核心。作為乙個輕量級的作業系統,功能包括 任務管理 時間管理 訊號量 訊息佇列 記憶體管理 記錄功能 軟體定時器 協程等,可基本滿足較小系統的需要。開啟後如下如顯示 為了避免出錯,請將路徑改為全英文 將主程式改為如下 include freertos.h in...
STM32之串列埠原理
串列埠通訊定義 串列埠是計算機上一種非常通用裝置通訊的協議。大多數計算機包含兩個基於rs232的串列埠。串列埠同時也是儀器儀表裝置通用的通訊協議 很多gpib相容的裝置也帶有rs 232口。同時,串列埠通訊協議也可以用於獲取遠端採集裝置的資料。串列埠通訊原理 串列埠通訊的概念非常簡單,串列埠按位 b...