在STM32學習中,我們肯定會學到串口的使用,其中關于串口資料的接收和發送,我們其實可以用 printf() 函式和 getchar() 函式來簡化傳輸,我們只需要做一些簡單的前期作業即可,
在 C 語言標準庫中,fputc 函式是 printf 函式內部的一個函式,功能是將字符 ch 寫入到檔案指標 f 所指向檔案的當前寫指標位置,簡單理解就是把字符寫入到特定檔案中,我們使用 USART 函式重新修改 fputc 函式內容,達到類似“寫入”的功能,
fgetc 函式與 fputc 函式非常相似,實作字符讀取功能,在使用 scanf 函式時需要注意字符輸入格式,
還有一點需要注意的,使用 fput 和 fgetc 函式達到重定向 C 語言標準庫輸入輸出函式必須在 MDK 的工程選項把“Use MicroLIB”勾選上,MicoroLIB 是預設 C 庫的備選庫,它對標準 C 庫進行了高度優化使代碼更少,占用更少資源,為使用 printf、scanf 函式需要在檔案中包含 stdio.h 頭檔案
代碼如下:
/*重定向c庫函式printf到串口,重定向后可使用printf函式*/
int fputc(int ch, FILE *f)
{
/* 發送一個位元組資料到串口 */
USART_SendData(DEBUG_USARTx, (uint8_t) ch);
//DEBUG_USARTx改成你想用的USART埠
/* 等待發送完畢 */
while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_TXE) == RESET);
//DEBUG_USARTx改成你想用的USART埠
return (ch);
}
///重定向c庫函式scanf到串口,重寫向后可使用scanf、getchar等函式
int fgetc(FILE *f)
{
/* 等待串口輸入資料 */
while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_RXNE) == RESET);
//DEBUG_USARTx改成你想用的USART埠
return (int)USART_ReceiveData(DEBUG_USARTx);
//DEBUG_USARTx改成你想用的USART埠
}
如果你用的是STM32的韌體庫,應該可以直接復制粘貼,只需要改DEBUG_USARTx即可,如果你是其他的,呢么你只要把這兩段代碼里的發送和接受函式,換成你自己的函式即可,
當然,有的小伙伴會發現,自己在重定向的時候可能會出錯,達不到預期的效果,(排除你重定向函式寫錯的可能)
首先,記得包含頭檔案 #include <stdio.h>
其次,如果你用的是 KEIL,你還需要設定一個東西
點擊這個魔術棒,進入到設定頁面

然后點擊使用Use MicroLIB

一般注意這兩點的話,就可以成功的實作重定向,如果還有其他問題,歡迎交流,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/256876.html
標籤:其他
