如何將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,就可以成功通訊