STM32 cubeMX配置串口重定向

news2024/9/21 18:34:13

文章目录

  • 前言
  • 一、工程配置
  • 二、串口重定向的原因
  • 三、实现串口重定向
    • 1.如何实现重定向
    • 2.具体步骤
  • 总结


前言

这篇文章主要讲解什么是串口重定向,为什么要串口串口重定向。

一、工程配置

1.芯片选型
我这里使用的是STM32 103ZET6大家可以根据自己板子的型号进行芯片的选择
在这里插入图片描述
2.基本配置
(1)设置STlink仿真debug
在这里插入图片描述
(2)开启外部高速时钟
在这里插入图片描述
(3)串口设置
设置串口为异步通信,并打开串口中断。
在这里插入图片描述
这里的波特率直接使用最大的就好了,波特率越大串口传输数据的速度越快。
在这里插入图片描述
(4)设置时钟树
这里也没什么具体要求直接使用最大的72MHZ即可,频率越大单片机速度越快。
在这里插入图片描述
(5)生成代码
这里的操作大家不要小看了,很多人因为最后生成工程出错了导致整个工程出错。
设置的工程名字和路径都不能包含有中文名,否则会报错。
在这里插入图片描述
勾选生成独立的.c和.h文件
在这里插入图片描述

二、串口重定向的原因

平时我们使用串口给上位机发送数据都是使用HAL库自带的函数进行发送,对于不熟悉这个函数的人来说用起来可能不太方便,还有一个最重要的就是使用这个函数只能发送字符串。不能使用发送中文和数字的功能。

HAL库自带的串口发送函数
这里就暂时不介绍这个函数的用法了。

HAL_UART_Transmit

使用这个函数去发送数字或者中文数据时,需要格式化字符串,需要使用到sprintf,这对于C语言基础知识不好的同学来说又增加了负担,而且使用起来还麻烦。
所以这里给大家带来一个简便的方法:串口重定向。

三、实现串口重定向

1.如何实现重定向

在C语言中我们一般是使用printf函数进行输出到屏幕,scanf函数进行输入。
在嵌入式设备中,一般使用串口进行输入,输出。
而printf函数的输出就是依赖于fputc函数实现的,所以我们只需要重写fputc函数即可。

2.具体步骤

使用微库。MicoroLIB 是缺省 C 库的备选库,它对标准 C 库进行了高度优化使代码更少,占用更少资源。为使用 printf、 scanf 函数需要
在文件中包含 stdio.h 头文件
在这里插入图片描述
在uart.c文件下包含 #include <stdio.h>因为在这里我们需要重新实现fputc函数
在这里插入图片描述
fputc函数的改写

int fputc(int ch,FILE *f)
{
	HAL_UART_Transmit(&huart1,(uint8_t*)&(ch),1,1000);
	
	return (ch);
}

将fputc函数改写后我们就可以使用printf函数给上位机发送数据了。

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  MX_TIM1_Init();
  /* USER CODE BEGIN 2 */
  printf("hello world\r\n");	
  /* USER CODE END 2 */

总结

使用printf函数和上位机通信是非常的方便的。希望大家都能够掌握。

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

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

相关文章

【HCIE考试喜报】2022年11月11日考试通过

网络工程师认证&#xff1a;HCIE&#xff08;华为ICT专家认证&#xff09;_微思xmws的博客-CSDN博客_hcie证书华为HCIE课程介绍HCIE认证概述HCIE-R&S认证定位于大中型复杂网络的构建、优化和管理。HCIE-R&S认证包括但不限于&#xff1a;不同网络和各种路由器交换机之间…

Windows环境下使用命令行在达梦数据库导入dmp文件

注意&#xff1a; 1.创建的用户要跟dmp文件中的一致 2.为什么使用命令行&#xff1f;因为这样可以不用关心由于字符编码不一致导致导入不成功。 3.一定要给权限&#xff0c;我这里全部都给了&#xff0c;自己用的本地库&#xff0c;具体还没总结 4.如何查看已经安装的达梦数据库…

20K+ SRE面试题分享

今天群里有位老哥面试20K的SRE顺手拍了3张面试题,和大家分享一下.第三张实在太模糊就没放了. 第三张实在拍的太模糊 1. 选择题 没发 2. 填空题(共20题&#xff0c;每题2分&#xff0c;总分40分&#xff0c;请在括号里填入最合适的答案) 某文件的权限为drw-r–r–用数值形…

python基础语法>>基本数据类型

一个喜欢算法的大三在校学生,每周都会将学到的知识贡献给大家。☁️&#x1f4a1;&#x1f388; 开始之前&#xff0c;不妨休息一下&#xff0c;先看个小动画&#x1f375;&#xff0c;才能激情地去学习&#xff01; 用python的一个小turtle画了一个简易版的图书馆 python语法大…

概述机器学习算法(机器学习)

目录 机器学习的一般步骤 分类算法 决策树 支持向量机 最近邻算法 贝叶斯网络 神经网络 聚类算法 K—均值算法 BIRCH算法 CURE算法 OPTICS算法 关联分析算法 Apriori算法 FP-growth算法 回归分析算法 线性回归 逻辑回归 多项式回归 邻回归 LASSO回归 深度…

U++学习笔记 ------ 多播委托

多播委托 1、可以绑定多个回调函数&#xff0c;所有绑定的回调函数都会执行&#xff0c;实质是维持了一个单播委托的数组没有返回值支持参数不支持反射以及序列化 绑定多播委托 Add&#xff1a;将函数委托添加 到该多播委托的调用列表中。 AddStatic&#xff1a;添加原始C指针…

类和对象(下)

关于类和对象依旧有许多难点&#xff0c;这篇博客将会讲解关于类的构造函数的初始化列表&#xff0c;静态成员&#xff0c;友元&#xff0c;内部类&#xff0c;以及匿名对象等一些比较复杂的东西。 初始化列表 我们之前就已经学过类和对象的构造函数&#xff0c;但是实际上那并…

[小技巧]C# 反射

文章目录定义Namespace场景示例简单反射一个对象进行操作反射一个有参构造函数的对象反射一个泛型类型的对象简单反射一个方法进行操作反射一个泛型方法进行操作反射一个静态&#xff08;Static&#xff09;方法定义 反射提供描述程序集、模块和类型的对象&#xff08;Type 类…

设计模式----工厂模式

设计模式----工厂模式 文章目录设计模式----工厂模式一.简介1. 什么是工厂模式&#xff1f;2. 工厂模式的类型&#xff1f;3. 工厂模式的使用场景&#xff1f;二. 使用1. 简单工厂模式2. 工厂方法模式3. 抽象工厂模式一.简介 1. 什么是工厂模式&#xff1f; 工厂模式&#xff…

【SpringBoot项目】SpringBoot项目-瑞吉外卖【day03】分类管理

文章目录前言公共字段自动填充问题分析代码实现功能测试功能完善新增分类需求分析模型代码开发功能测试分类信息分页查询需求分析代码开发功能测试删除分类需求分析代码开发功能完善修改分类需求分析代码实现结尾&#x1f315;博客x主页&#xff1a;己不由心王道长&#x1f315…

11.17 - 每日一题 - 408

每日一句&#xff1a; 世上没有侥幸的成功&#xff0c;只有加倍的努力。 数据结构 1 一棵左右子树均不空的二叉树在先序线索化后&#xff0c;其中空的链域的个数是______ A. 0B. 1C 2D.不确定答案&#xff1a;B 解析&#xff1a;线索二叉树利用了二叉链表中的空的左右孩子指…

高通导航器软件开发包使用指南(3)

高通导航器软件开发包使用指南&#xff08;3&#xff09;3.2 实时数据查看3.3 日志分析3.4 其他日志记录系统信息3.4.1查看数据记录选项3.4.2确保日志存储3.4.3获取snav_vector版本3.2 实时数据查看 snav_sinspector控制台应用程序允许以人工方式查看日志文件中的二进制数据 …

java项目-第142期ssm美食推荐系统-ssm毕业设计_计算机毕业设计

java项目-第142期ssm美食推荐系统-ssm毕业设计_计算机毕业设计 【源码请到资源专栏下载】 今天分享的项目是《ssm美食推荐系统》 该项目分为2个角色&#xff0c;管理员和用户。 用户可以浏览前台,包含功能有&#xff1a; 首页、热门美食、美食教程、美食店铺 、美食社区、美食资…

Arthas教程

Linux环境安装 下载地址&#xff1a;https://alibaba.github.io/arthas/arthas-boot.jar java -jar arthas-boot.jar 运行 quit 退出 stop 停止Arthas快速入门 一.执行一个jar包 二.通过arthas来attach&#xff08;黏附&#xff09; 三.常用命令操作 诊断demo下载http…

Oracle Primavera Unifier活动管理器(Activity Manager)

目录 一、简要介绍 二、其他相关 一、简要介绍 Oracle Primavera Unifier Activity“活动”被定义为必须按计划完成的工作或事件的一部分。 Activity也就是以上的活动&#xff0c;它从映射的 P6 项目中捕获计划数据&#xff0c;从公司级主费率表&#xff08;默认&#xff0…

大数据必学Java基础(一百零二):连接池的使用

文章目录 连接池的使用 一、连接池基础知识扩展 二、代码实战 1、定义连接池

信道划分介质访问控制ALOHA协议CSMA协议CSMA/CD协议轮询访问MAC协议

注&#xff1a;最后有面试挑战&#xff0c;看看自己掌握了吗 文章目录传输数据两种链路点对点链路广播式链路介质访问控制静态划分信道动态划分信道轮询访问介质访问控制随机访问介质访问控制---所有用户都可以随机发送信息ALOHA协议------想说就说CSMA协议------先听再说1-坚持…

【保姆级】新机器部署RabbitMQ

1、登录服务器&#xff0c;如果非root用户则切root用户 sudo su - 2、在/usr/tmp目录上传erlang、rabbitmq安装包 3、将安装包移到/usr/local/目录 mv /usr/tmp/erlang-21.3.8.2-1.el7.x86_64.rpm /usr/local/ mv /usr/tmp/rabbitmq-server-3.7.15-1.el7.noarch.rpm /usr/lo…

基础知识:临界阻尼

任何一个振动系统&#xff0c;当阻尼增加到一定程度时&#xff0c;物体的运动是非周期性的&#xff0c;物体振动连一次都不能完成&#xff0c;只是慢慢地回到平衡位置就停止了。当阻力使振动物体刚好能不作周期性振动而又能最快地回到平衡位置的情况&#xff0c;称为“临界阻尼…

JS高级(三):严格模式、闭包、递归、深拷贝和浅拷贝

JavaScript高级&#xff08;三&#xff09;一、严格模式1.开启严格模式&#xff08;1&#xff09;为脚本开启严格模式&#xff08;2&#xff09;为某个函数开启严格模式2.严格模式的一些规定&#xff08;1&#xff09;禁止变量未声明就赋值&#xff08;2&#xff09;禁止删除已…