如何將printf函數實現在STM32上?

有時候在進行STM32開發的時候,由於程式碼是燒錄到STM32當中,當程式碼運行有問題時,我們就需要有printf的功能,一段一段把程式碼的變數顯示出來,才能找出問題的所在。

一般在電腦上使用printf功能,只要include標準函式庫,再加入printf的指令,就可以在程式碼運行後在視窗上顯示變數。

不過當我們想在STM32上面實現printf的功能,就需要對程式碼做一些修改,本篇文章帶您了解,如何在STM32上面實現printf的功能。

我們選用的板子是Nucleo board STM32的核心版,型號為F446RE,由於要與電腦連接,我們就要看到底哪個通道可與電腦通訊。

查找使用者手冊會發現,在USART2可在PA2與PA3使用,然後有連接到STlink,這代表我們只要有一條可傳輸資料的mini usb,我們就可以透過這條線與電腦通訊。

以下是硬體連接圖

查找使用者手冊會發現,在USART2可在PA2與PA3使用,然後有連接到STlink,這代表我們只要有一條可傳輸資料的mini usb,我們就可以透過這條線與電腦通訊。

先前有提到USART2是在PA2與PA3接腳,我們就要進一步查看,哪個是TX哪個是RX,就可以查找手冊上面的pin腳定義,我們就會發現PA2有USART2_TX功能,PA3有USART2_RX功能。

就進一步在cubeMX上將PA2設定為USART2_TX以及將PA3設定為USART2_RX

設定完成後,就可以產生程式碼,這時候就會將USART2相關設定自動設定完成,我們就可以開始著手撰寫printf的部分。

Printf 要修改的部分是 因為一般在電腦上的print是顯示在電腦螢幕上,但是現在程式碼是燒錄在STM32上,因此,同樣的函數需要修改,在一開始部分要先define PUTCHAR

我們要加入PURCHAR這個部分,是因為我們要將print訊息顯示在UART串口,因為現在程式碼是燒錄在板子上,沒有辦法顯示在電腦螢幕,所以我們會將print內容顯示在UART串口通訊上。

然後在最下方while迴圈部分,顯示printf顯示字串Hello。

整體傳輸架構如下所示

這時候在程式碼上面加入printf

即可將我們要顯示的字串,傳到UART串口上,

最後,因為USART是屬於串列通訊,我們要將透過putty顯示,查看裝置管理員,查找com port是幾,然後輸入Baud rate,就可以成功通訊

Similar Posts