STM32物联网实战开发(3)——串口打印

news2025/1/17 0:56:43

串口打印

        串口的使用在单片机开发过程中经常出现,因为他在显示数据和调试过程中特别的方便,使用起来也很简单。

1.用STM32CubeMx配置串口

串口1模式选择异步,不开启硬件控制流(串口通信分为同步通信和异步通信,他们往往和时钟有关。)

 

波特率:115200(一般工业上位9600,干扰小的话波特率越大,传的越快)

数据长度:8位

校验位:无

停止位:1位

使能接收和发送

重复采样(Over Sampling):对电平状态重复采样,提高准确性,默认16 Samples,无法修改

 

2.生成keil工程,编写程序

public.h

串口宏定义,宏名 huart_debug 后续用于串口发送函数中

/* Public define-------------------------------------------------------------*/
#define SoftWare_Version (float)1.0
#define huart_debug huart1

 public.c

        在程序框架的public.c文件中,对 printf 函数进行重映射操作,重写 fputc函数(这里fputc为printf函数的底层函数,使用printf函数就是对fputc函数的调用,然后将一个个字符打印出来,我们将fputc函数重映射到串口上,所以我们的串口可以将我们想要显示的内容打印出来。)

        HAL_UART_Transmit函数的第一个参数是要发送接收的串口号,第二个参数是要发送字符的指针,第三个参数是发送的字符个数,第四个参数是发送的超时时间,单位为毫秒。

/*
* @name   fputc
* @brief  fput映射到物理串口
* @param  ch:待发送的字符
* @retval ch:已发送的字符   
*/
int fputc(int ch,FILE* f)
{
  //往串口1发送ch字符,每次发送1个字符,超时时间为10ms
  HAL_UART_Transmit(&huart_debug,(uint8_t*)&ch,1,0x000A);
  return ch;
}

3.发送字符串

MyInit.c

在自己的初始化函数中,用 printf 函数往串口1打印初始化信息

/*
* @name   Peripheral_Set
* @brief  外设设置
* @param  None
* @retval None   
*/
static void Peripheral_Set()
{
  printf("---此程序实现串口打印功能---\r\n");
  printf("Initialization completed,system startup!\r\n");
  printf("Software version is V%.1f\r\n\r\n",SoftWare_Version);

  printf("开始运行有限状态机:\r\n\r\n");
}

System.c

系统运行函数中,串口输出状态机运行次数,输出每次运行的状态

/*
* @name   Run
* @brief  系统运行
* @param  None
* @retval None   
*/
static void Run()
{
  static uint8_t STA_Cnt = 1;

  if(STA_Machine.ucSTA_Machine_Status == STA1)
  {
    printf("状态机第%d次运行!\r\n",STA_Cnt++);
  }

	switch (STA_Machine.ucSTA_Machine_Status)
  {
    case STA1:STA_Machine.Fun_STA1();printf("状态机状态为STA1\r\n");break;
    case STA2:STA_Machine.Fun_STA2();printf("状态机状态为STA2\r\n");break;
    case STA3:STA_Machine.Fun_STA3();printf("状态机状态为STA3\r\n");break;
    case STA4:STA_Machine.Fun_STA4();printf("状态机状态为STA4\r\n");break;
    case STA5:STA_Machine.Fun_STA5();printf("状态机状态为STA5\r\n\r\n");break;
    default:STA_Machine.ucSTA_Machine_Status = STA1;break;
  }
}

4.串口打印结果

 

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/474108.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云HIS : 电子病历模板制作过程技术经验分享

电子病历的制作就是按照医院机构的特色,根据不同业务需求,使用模板编辑与预览工具, 综合运用工具模块制作个性化、实用化、特色化电子病历模板的过程。 按照制作流程分为以下几个步骤: 1.明确病历类型:根据业务方向…

掌握好这几款TikTok数据分析工具,让你轻松提高曝光率!

为什么别人在TikTok发的普普通通的视频却有那么高的流量、几天内疯狂涨粉,而自己想破脑袋装饰自己的视频,结果却不如人意。 其实原因很简单,TikTok不像国内的抖音只面向中华民族,而是覆盖了150多个国家和75种语言用户&#xff0c…

【五一创作】Scratch资料袋

Scratch软件是免费的、免费的、免费的。任何需要花钱才能下载Scratch软件的全是骗子。 1、什么是Scratch Scratch是麻省理工学院的“终身幼儿园团队”开发的一种图形化编程工具。是面向青少年的一款模块化,积木化、可视化的编程语言。 什么是模块化、积木化&…

【VM服务管家】VM4.x算子SDK开发_3.1 环境配置类

目录 3.1.1 环境配置:CSharp算子SDK开发环境配置方法3.1.2 算子封装:使用C封装算子SDK的方法3.1.3 异常中断:算子SDK软件运行报错“托管调试助手”中断的解决方法3.1.4 深度学习:GPU运行深度学习算子引发StackOverFlow异常的方法 …

FP独立站推广成本太高?那是因为你没看到这篇!

近年来,越来越多的商家开始搭建自己的跨境电商独立站,做起了FP独立站。那么用独立站做FP到底有什么优势?还有,推广成本真的很高吗?今天这期就给大家扒一扒。 用独立站做FP的优势 1、塑造品牌,扩大经营触及…

【HarmonyOS】元服务WebView组件 H5使用localstorage

在日常开发中我们会在应用种接入H5网页,localStorage作为H5本地存储web storage特性的API之一,主要作用是将数据保存在客户端中。对于快速开发元服务,通过WebView组件运行H5如何使用localstorage呢?下文以API7 JavaUI为例为大家做…

k8s 集群搭建详细教程

参考: Kubernetes 文档 / 入门 / 生产环境 / 使用部署工具安装 Kubernetes / 使用 kubeadm 引导集群 / 安装 kubeadm B. 准备开始 一台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提供包管理器的发行版提供通用的指令每…

3.3 Linux shell命令(权限、输入输出)

目录 shell shell概述 shell分类 查看当前系统的shell 权限相关命令(也是shell命令) 基本命令 输入输出相关操作 输出命令 输入输出重定向 通配符 管道 历史查询、补齐功能 历史查询 自动补齐 命令置换 shell 什么是shell shell是一种负…

【VM服务管家】VM4.0软件使用_1.2 工具类

目录 1.2.1 文本保存:逐行保存格式化模块输出的方法1.2.2 脚本模块:循环模块搭配脚本使用的方法1.2.3 几何查找:彩色图像的几何查找方法1.2.4 深度学习:图像分割的面积的获取方法1.2.5 颜色识别:使用颜色识别工具做分类…

【Leetcode -86.分隔链表 -92.反转链表Ⅱ】

Leetcode Leetcode -86.分隔链表Leetcode -92.反转链表Ⅱ Leetcode -86.分隔链表 题目:给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每…

java数据结构之HashMap

目录 前言 1、初始化 1.1、初始化 1.2、插入第一条数据 2、数组 链表 2.1、插入数据:没有hash冲突 2.2、插入数据:Key不同,但产生hash冲突 2.3、插入数据:Key相同 3、数组 红黑树 3.1、链表如何转化为红黑树? 3.…

Postman测试实践笔记

Postman测试实践 文章目录 Postman测试实践一、Postman安装与使用1.1 Postman下载及安装1.1.2 Postman Mac版 1.2 Postman 更新1.2.1 mac 版更新 1.3 Postman 其他问题 二、网络相关知识2.1 接口2.1.1 软件为什么需要接口 2.2 接口测试2.2.1 什么是接口测试:2.2.2 为…

VTK下载并安装

去官网下载https://vtk.org/download/ 选择最新稳定版本 然后点击source后边的压缩包进行下载。 下载完成后将其解压到特定的文件夹下,然后打开cmake-gui.exe,第一行选择刚刚解压的文件夹,这个文件夹下有一个CMakeLists.txt文件&#xff0c…

【6. 激光雷达接入ROS】

欢迎大家阅读2345VOR的博客【6. 激光雷达接入ROS】🥳🥳🥳 2345VOR鹏鹏主页: 已获得CSDN《嵌入式领域优质创作者》称号👻👻👻,座右铭:脚踏实地,仰望星空&#…

Go | 一分钟掌握Go | 8 - 并发

作者:Mars酱 声明:本文章由Mars酱编写,部分内容来源于网络,如有疑问请联系本人。 转载:欢迎转载,转载前先请联系我! 前言 当今编程界,一个好的编译型语言如果不支持并发&#xff0c…

工控老司机告诉你热电偶和RTD的区别

热电偶和热电阻都是温度传感器,但它们的原理、功能特性和应用场景有所不同。 一、原理区别 首先,热电偶是利用两种不同金属之间的热电效应来测量温度的。其原理是利用温度差引起的金属之间的热电势差进行测量。两种金属之间存在一种热电势(…

Yolov8优化:卷积变体---分布移位卷积(DSConv),提高卷积层的内存效率和速度

论文: https://arxiv.org/pdf/1901.01928v1.pdf 摘要:提出了一种卷积的变体,称为DSConv(分布偏移卷积),其可以容易地替换进标准神经网络体系结构并且实现较低的存储器使用和较高的计算速度。 DSConv将传统的卷积内核分解为两个组件:可变量化内核(VQK)和分布偏移。 通过…

双亲委派机制的原理和作用

双亲委派机制,就必须弄清楚Java的类加载器。 什么是类加载器 Java类加载器(ClassLoader)是Java运行时环境(JRE)的一部分,负责动态的将Java类加载到Java虚拟机的内存空间。 类加载器有哪些 主要有三个: 引导类加载器(Bootstrap ClassLoade…

前端开发在本地开发与后台进行联调阶段时,接口自动重定向https、HSTS 与 307 状态码

开发者在本地开发与后台进行联调阶段时,Chrome 浏览器上出现 307 状态码,并跳转到 https 版 但是 307 代码是什么含义呢?页面又为何会出现 307 状态码呢?我之前都没见过这个状态码,查了才知道原来它也是一种重定向。 …

数字三角形+包子凑数(蓝桥杯JAVA解法)

数字三角形:用户登录 题目描述 上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和(路径上的每一步只可沿左斜线向下或右斜线向下走…