zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    C++ 构造函数初始化列表
    虚函数
    thread 学习
    vim学习笔记
    Python重载比较运算符
    python使用插入法实现链表反转
    【好文转】Python中yield的理解与使用
    【转】Python中自定义可迭代对象
    linux安装python3.6.6和新建虚拟环境
    【转】Python 并行分布式框架 Celery
  • 原文地址:https://www.cnblogs.com/zhanxiaohong0303/p/zz_2020_10_1.html
Copyright © 2011-2022 走看看