STM32使用HAL串列埠封裝printf

2021-10-12 10:35:31 字數 1394 閱讀 2183

自己封裝乙個類似 printf 的函式(前提是已經可以實現串列埠傳送了):

#include

#include

#include

uint32_t uart_strlen ( uint8_t *str )

return cnt;

}void

usart_printf

(uint8_t usartport,

char

*fmt,..

.);va_start

(ap, fmt)

;vsprintf((

char

*)databuf, fmt, ap)

;va_end

(ap);if

(usartport ==1)

//等待串列埠1傳送完成

while

(hal_uart_getstate

(&huart1)

== hal_uart_state_busy_tx);}

else

if(usartport ==2)

//等待串列埠2傳送完成

while

(hal_uart_getstate

(&huart2)

== hal_uart_state_busy_tx);}

else

return

;}

之後就可以在**裡通過usart_printf函式實現串列埠列印,需要注意的是:

列印最後需要加上"\n\r",否則換行會不正常,比如usart_printf(1, 「hello world ! \n\r」);

使用標準的printf函式:

詳情可參考這篇博文:stm32上使用printf.

勾選use micro lib庫,包含stdio.h標頭檔案

採用串列埠的方式,主要就是重定向printf使用哪乙個串列埠輸出。

#include

#ifdef __gnuc__

#define putchar_prototype int __io_putchar(int ch)

#else

#define putchar_prototype int fputc(int ch, file* f)

#endif

/* __gnuc__ */

#ifdef __cplusplus

extern

"c"#ifdef __cplusplus

}#endif

//__cplusplus

接下來就可以直接用printf函式實現列印。

no pains, no gains.

STM32使用HAL庫寫串列埠接收中斷

硬體 正點原子戰艦開發板 stm32f103zet6 軟體 mdk5,stm32cubemx 下面講解使用hal庫配置串列埠1,使串列埠1可以使用中斷接收位元組並原樣返回。uint8 t uart1 rxbuf 10 用於存放接收到的資料 void mx usart1 uart init void ...

STM32之串列埠

名稱 stm32之串列埠 說明 對於stm32的串列埠通訊來說,從外部看,和c51差不多。從內部看,啊。我還不了解。從使用上說,也是需要先配置usart,然後通過終端或者輪詢的方式接受或者輸出資料。由於有了韌體庫函式的幫助,stm32的串列埠配置起來比c51還要方便不少。本實驗完成的是輸入輸出重定向...

STM32 的串列埠

一 串列埠使用 原則 盡量中斷中不要有延時 比如自定義delay 和自定義printf串列埠列印,明顯找事啊這麼慢能不發生溢位error嘛 接收和傳送盡量分開處理 1.串列埠傳送資料丟失 1 通常是因為傳送之前未檢測tc狀態位之前是否處於傳送完成標誌導致,關於stm32之 的測試程式來講會導致第乙個...