本篇文章主要介紹STM32的多串口Printf打印,因為在實際項目中可能會遇到,幾個串口需要打印不同類型的數據(如字符串%s,浮點型 %f等),或者是用到了AT指令的模組,因此Printf打印就十分的方便,所以今天講一講如何實現多串口Printf打印。還有就是在項目中因為布線問題,我們收到的原理圖往往有些引腳被映射到其他引腳上而實現串口,PWM等功能,所以今天也講講引腳的重映射,希望能給人以收獲。
1.開發環境
軟件環境
使用MDK5.25版本,芯片包為STM32F4系列。
硬件環境
開發板:STM32F407VGT6開發板,是一款大容量芯片,最高能跑168MHz。
燒錄器:STlink或者Jlink。
2.工程搭建
直接復制第三篇串口printf打印的代碼先實現引腳重映射,然后再實現多串口Printf打印。
關於端口復用與重映射
(1).端口復用: STM32有很多內置外設如(串口,SPI等)復用到GPIO引腳上,便能達到節省引腳的作用,我們可以在使用的時候選擇對應引腳的功能。
(2).重映射: 重映射分為沒有重映射、部分重映射和完全重映射,在STM32F1定時器上體現的更為明顯(然而STM32F4一般只有一個重映射),而且重映射一般不適用36個引腳的芯片,一般適用於64引腳及以上的芯片(具體查閱芯片手冊)。
串口1重映射
查看映射表看USART1除了PA9,PA10之外還能被重映射到哪些引腳上。
由映射表可以得出我們可以把串口1重映射到PB6,PB7引腳上。
串口初始化
看原理圖找PB6,PB7引腳測試是否重映射成功。
外接了一個CH340,記得TX接芯片RX,RX接芯片TX。
多串口Printf實現
所用到的知識還是C語言中的函數可變參數。首先要包含頭文件"stdarg.h"。
然后編寫我們的Printf函數,兼容多串口(注意:對應的串口要先初始化)。
3.測試
將我們之前在主循環的print打印函數換成我們剛寫好的Printf可變參函數。
4.總結
如果打印的數據比較長的話,一定要把用於打印的字符串數組的數組長度加大,不然會出錯導致亂碼或者死機,還有就是vsprintf函數可能會出現內存溢出的情況,所以更建議使用vsnprintf,希望大家自行了解,權衡修改。
代碼已全部上傳到gitee,希望各位小伙伴們在下載的同時不忘點擊Star,地址:https://gitee.com/Notmi/stm32-standard-peripheral-libraries。