本篇文章主要介绍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。