STM32标准库_07 | 多串口Printf打印与重映射

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

posted @ 2020-10-02 01:07  半截心跳  阅读(2167)  评论(1编辑  收藏  举报