当前位置: 首页 > news >正文

STM32嵌入式编程学习到提高:【4】UART串口打印

-------------------------------------------------------------------------------------------------------------------------

工程文件:放在百度云盘里,需要的自行下载!!!
链接: https://pan.baidu.com/s/14gRne9kHhxPiXBfGEMTSgQ?pwd=xyza

提取码: xyza

-------------------------------------------------------------------------------------------------------------------------

在学习嵌入式时候,串口打印log输入输出是个很有用的工具,就像学硬件需要用到万用表,示波仪,当医生需要温度计一样。所以我们必须第一时间实现这个功能。

--------------------------------------------------------------------------------------------------------------------------

本文目标:

串口工具打印输出: "hello world!!!"

串口工具输入:“HI:”
单片机响应再输出:“How are you!!!”

----------------------------------------------------------------------------------------------------------------------------

1:创建文件: uart.c,uart.h并添加到工程

2:养成习惯,在.c文件里包含.h文件,.h里加上条件编译语句。

__UART_H__是一个约定俗成的写法,你也可以写成其它样式,需要保持唯一性,但最好这样写。

#ifndef

#define
#endif

这个是个条件编译语句,避免重复包含头文件。造成资源浪费,每个头文件都加上这几句,养成好的编程习惯。

3:接下来,我们实现第一步:打印"hello world!!!",通过前面的学习我们知道,单片机跑起来后会进入main函数,那我们就在mian里面写一个pirntf打印语句看看。

我们在while里和while外各加一个printf语句,看看打印出来后的区别,应该有点基础的同学大部分知道。这个自己观察~~~~,这个也是嵌入式一个很重要的特性!!!

4:编译一下,报警了,printf声明不合法

5:我们并没有去写printf的函数实现,也是直接用printf的库函数,所以我们需要把声明过printf函数的头文件包含进来:stdio.h

警告消除,这样就能打印了么?貌似没有这么简单,跟单片机相关的硬件我们还一点没处理呢,那软件的字符怎么就能通过硬件的特定pin传输到串口工具里去呢?

printf(); 底层调用的是fputc()库函数,这是一个weak函数,我们想用UART输出,就需要重写fputc()

/****************************************************************************************************************************************** 
* 函数名称: fputc()
* 功能说明: 重写fputc函数
* 输    入: 
*			
* 输    出: 无
* 注意事项: USART1->SR:状态寄存器,USART1->DR:数据寄存器
******************************************************************************************************************************************/
int fputc(int ch, FILE *f)
{      while((USART1->SR & 0X40)==0);     //发送寄存器空标志位,空:1,非空:0,发送完了接着发下一个数据,否则阻塞在这USART1->DR = (u8) ch;   					 //把待发送的数据写入数据寄存器,  USART1->DR return ch;
}

6:带着上面的问题,我们得想想自己的开发板硬件,那些pin是接在uart线上的。然后,我们需要把硬件相关的设置好,这样才能正确的工作起来。

我用的开发板,用的是uart1,对应的gpio管脚是:PA9和PA10 (这里需要对照硬件设计确定管脚)

那接下来第一步,就是初始化硬件,把PA9和PA10 GPIO引脚,配成uart1工作模式,并设置中断接收(RX线上来数据的时候,MCU产生中断,中断服务函数再去处理接收到的数据)

7:编译的时候记得勾选使用微库

8:然后再下载到开发板里,然后就打印出来了log。这样我们就完成了通过uart输出log的功能

9:接下来我们看一下通过串口工具给开发板发消息,我们通过接收中断来做

相关文章:

STM32嵌入式编程学习到提高:【4】UART串口打印

------------------------------------------------------------------------------------------------------------------------- 工程文件:放在百度云盘里,需要的自行下载!!! 链接: https://pan.baidu.com/s/14gRne…...

C 标准库 - <ctype.h>

C 标准库 - <ctype.h> 概述 <ctype.h> 是 C 语言标准库中的一个头文件,它提供了一系列用于测试和操作字符的函数。这些函数主要用于检查字符是否属于特定的字符类别,如字母、数字、标点符号等,以及进行字符的大小写转换。<ctype.h> 中的函数通常在处理文…...

linux:chown用法详解

文章目录 1. 描述2. 语法3. 参数4. 例子 1. 描述 chown 是 Linux 中用于更改文件或目录的所有者和所有者组的命令。 2. 语法 chown [选项] 所有者[:组] 文件名详细用法&#xff1a; Usage: chown [OPTION]... [OWNER][:[GROUP]] FILE...or: chown [OPTION]... --reference…...

介绍GPT-o1:一系列解决困难问题( science, coding, and math )的推理模型

openai o1介绍 一、官方技术报告要点剖析实验1 benchmark分析实验2:和phd比赛技术细节&#xff1a;Chain of Thought的使用人类偏好评估Human preference evaluationsatety技术细节&#xff1a;隐藏思维链为监控模型提供了机会:)openai的几点conclusion 二、官方介绍剖析 Intro…...

2024 Python3.10 系统入门+进阶(十六):正则表达式

目录 一、认识正则表达式二、正则表达式基本语法2.1 行界定符2.2 单词定界符2.3 字符类2.4 选择符2.5 范围符2.6 排除符2.7 限定符2.8 任意字符2.9 转义字符2.10 反斜杠2.11 小括号2.11.1 定义独立单元2.11.2 分组 2.12 反向引用2.13 特殊构造2.14 匹配模式 三、re模块3.1 comp…...

书生大模型实战营学习[7] InternLM + LlamaIndex RAG 实践

环境配置 选择30%A100做本次任务 conda create -n llamaindex python3.10 conda activate llamaindex conda install pytorch2.0.1 torchvision0.15.2 torchaudio2.0.2 pytorch-cuda11.7 -c pytorch -c nvidia pip install einops pip install protobuf安装Llamaindex cond…...

【MySQL】数据库--索引

索引 1.索引 在数据中索引最核心的作用就是&#xff1a;加速查找 1.1 索引原理 索引的底层是基于BTree的数据存储结构 如图所示&#xff1a; 很明显&#xff0c;如果有了索引结构的查询效率比表中逐行查询的速度要快很多且数据越大越明显。 数据库的索引是基于上述BTree的…...

[大语言模型-论文精读] ACL2024-长尾知识在检索增强型大型语言模型中的作用

ACL2024-长尾知识在检索增强型大型语言模型中的作用 On the Role of Long-tail Knowledge in Retrieval Augmented Large Language Models Authors: Dongyang Li, Junbing Yan, Taolin Zhang, Chengyu Wang, Xiaofeng He, Longtao Huang, Hui Xue, Jun Huang 1.概览 问题解决&…...

“迷茫野路子到AI大模型高手:一张图解产品经理晋升之路和能力构建“

前言 在探寻成功之路上&#xff0c;若你向20位业界顶尖的产品经理或运营专家请教&#xff0c;他们可能会向你展示一条条各异的路径&#xff0c;正如那句古老的格言&#xff1a;“条条大路通罗马”。但是&#xff0c;我们必须认识到&#xff0c;这些路径虽多&#xff0c;却并非…...

可看见车辆行人的高清实时视频第2辑

我们在《看见车辆行人的高清实时视频第2辑》分享了10处可看见车辆行人的实时动态高清视频。 现在我们又整理10处为你分享可看见车辆行人的实时动态高清视频&#xff0c;一共有30个摄像头数据&#xff0c;这些视频来自公开的高清摄像头实时直播画面。 我们在文末为你分享了这些…...

基于饥饿游戏搜索优化随机森林的数据回归预测 MATLAB 程序 HGS-RF

1. 引言 随着人工智能和机器学习的飞速发展&#xff0c;回归预测在各个领域得到了广泛应用。回归模型用于预测连续变量的值&#xff0c;如金融市场的价格走势、气象预报中的温度变化等。本文提出了一种基于**饥饿游戏搜索&#xff08;Hunger Games Search, HGS&#xff09;优化…...

一天面了8个Java后端,他们竟然还在背5年前的八股文!

今天面了8个Java候选人&#xff0c;在面试中我发现他们还停留在面试背八股文的阶段&#xff0c;5年前面试背八股文没问题&#xff0c;随着市场竞争越来越激烈&#xff0c;再问普通的Java八股文已经没有意义了&#xff0c;因为考察不出来获选人的真实实力&#xff01; 现在面试…...

python功能测试

文章目录 unnittest1. 基本结构2. 常用断言方法3. 测试生命周期方法4. 跳过测试5. 运行测试 pytest1. 基本测试用法2. 安装 pytest3. 运行测试4. 使用 assert 断言5. 异常测试6. 参数化测试7. 测试前后设置8. 跳过测试和标记失败9. 测试夹具 (Fixtures)10. 生成测试报告11. 插件…...

【秋招笔试】09.25华子秋招(已改编)-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收集…...

【中级通信工程师】终端与业务(四):通信产品

【零基础3天通关中级通信工程师】 终端与业务(四)&#xff1a;通信产品 本文是中级通信工程师考试《终端与业务》科目第四章《通信产品》的复习资料和真题汇总。终端与业务是通信考试里最简单的科目&#xff0c;有效复习通过率可达90%以上&#xff0c;本文结合了高频考点和近几…...

数据科学 - 字符文本处理

1. 字符串的基本操作 1.1 结构操作 1.1.1 拼接 • 字符串之间拼接 字符串之间的拼接使用进行字符串的拼接 a World b Hello print(b a) • 列表中的字符串拼接 将以分隔符‘,’为例子 str [apple,banana] print(,.join(str)); • 字符串中选择 通过索引进行切片操…...

python之装饰器、迭代器、生成器

装饰器 什么是装饰器&#xff1f; 用来装饰其他函数&#xff0c;即为其他函数添加特定功能的函数。 装饰器的两个基本原则&#xff1a; 装饰器不能修改被装饰函数的源码 装饰器不能修改被装饰函数的调用方式 什么是可迭代对象&#xff1f; 在python的任意对象中&#xff…...

Go语言实现后台管理系统如何根据角色来动态显示栏目

实现要点 根据不同的用户显示不同的栏目是后台管理的重要内容,那么如何实现这些功能呢? 栏目有很多分级这些需要递归查出来新增和删除也要满足层级规则且不影响其他层级各节点之间的关系因该明确,方便添加和删除数据库设置 存储栏目的数据库设计,要明确节点的关系最常用的…...

【深度学习】【TensorRT】【C++】模型转化、环境搭建以及模型部署的详细教程

【深度学习】【TensorRT】【C】模型转化、环境搭建以及模型部署的详细教程 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】【TensorRT】【C】模型转化、环境搭建以及模型部署的详细教程前言模型转换--pytorch转engineWindows平台搭…...

LeetCode(Python)-贪心算法

文章目录 买卖股票的最佳时机问题穷举解法贪心解法 物流站的选址&#xff08;一&#xff09;穷举算法贪心算法 物流站的选址&#xff08;二&#xff09;回合制游戏快速包装 买卖股票的最佳时机问题 给定一个数组&#xff0c;它的第 i 个元素是一支给定股票第 i 天的价格。如果你…...

从零到一:基于NOAA HYSPLIT的后向轨迹实战绘制与污染溯源分析

1. 认识HYSPLIT与后向轨迹分析 第一次接触HYSPLIT模型时&#xff0c;我也被这个复杂的缩写搞得一头雾水。简单来说&#xff0c;这是美国国家海洋和大气管理局&#xff08;NOAA&#xff09;开发的一款专业大气轨迹分析工具&#xff0c;全称是Hybrid Single Particle Lagrangian …...

[OS] Rate Monotonic Scheduling: Optimizing Real-Time Task Prioritization

1. 速率单调调度&#xff1a;实时系统的优先级管理艺术 想象一下急诊室的医生如何决定救治顺序——心跳停止的患者永远优先于感冒发烧的病人。速率单调调度&#xff08;Rate Monotonic Scheduling&#xff0c;RMS&#xff09;就是实时操作系统中的这位"分诊专家"&am…...

Cat-Catch实战手册:5个场景快速掌握网页资源抓取技巧

Cat-Catch实战手册&#xff1a;5个场景快速掌握网页资源抓取技巧 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否经常遇到这样的困境&#xff1f;在线课程视频无法下载、设计素材图片无法批量保…...

别光看论文!手把手带你复现CVPR 2025扩散模型加速新星:TinyFusion与DiG的代码实战

别光看论文&#xff01;手把手带你复现CVPR 2025扩散模型加速新星&#xff1a;TinyFusion与DiG的代码实战 如果你已经厌倦了在arXiv上收藏一堆永远打不开第二次的论文链接&#xff0c;或是被那些充满数学符号却缺少可运行代码的"理论创新"搞得头大&#xff0c;那么这…...

nuScenes数据集深度解析:从传感器融合到3D目标检测的完整数据流

nuScenes数据集工程化实战&#xff1a;多传感器时空对齐与3D检测数据流优化 在自动驾驶研发领域&#xff0c;数据是算法迭代的基石。当我们谈论nuScenes数据集时&#xff0c;多数讨论停留在基础功能介绍层面&#xff0c;却鲜有从工程实现角度剖析其数据流设计的精妙之处。本文将…...

MT5中文增强工具多场景落地:保险条款通俗化改写与消费者理解度提升实践

MT5中文增强工具多场景落地&#xff1a;保险条款通俗化改写与消费者理解度提升实践 1. 项目概述与核心价值 MT5中文增强工具是一个基于Streamlit和阿里达摩院mT5模型构建的本地化NLP工具&#xff0c;专门针对中文文本进行语义改写和数据增强。这个工具的最大特点是能够在保持…...

别再让DeepSeek-R1的<think>标签刷屏了!手把手教你用API和Python脚本一键隐藏思考过程

高效隐藏DeepSeek-R1思考过程的工程实践 当你在深夜调试一个集成DeepSeek-R1的客服系统时&#xff0c;终端突然被满屏的<think>标签刷爆——这种场景对开发者来说再熟悉不过了。作为一款强调推理过程的大语言模型&#xff0c;DeepSeek-R1默认会在输出中包含详细的思考步骤…...

3分钟搭建你的CS比赛分析系统:CS Demo Manager终极指南 [特殊字符]

3分钟搭建你的CS比赛分析系统&#xff1a;CS Demo Manager终极指南 &#x1f3ae; 【免费下载链接】cs-demo-manager Companion application for your Counter-Strike demos. 项目地址: https://gitcode.com/gh_mirrors/cs/cs-demo-manager 你是否曾经打完一场精彩的CS比…...

告别黑盒操作:详解mmc_utils在Android设备上的20+个实用命令(从extcsd读到RPMB写)

eMMC深度操作指南&#xff1a;解锁mmc-utils的20个高阶应用场景 当你的Android设备出现存储性能下降、分区异常或安全验证需求时&#xff0c;系统自带的工具往往束手无策。此时&#xff0c;一个被低估的神器mmc-utils正躺在Linux内核源码树中等待被唤醒——它不仅能够读取eMMC芯…...

Qwen3-TTS-12Hz-1.7B-Base真实案例:为视障开发者生成无障碍编程教程语音

Qwen3-TTS-12Hz-1.7B-Base真实案例&#xff1a;为视障开发者生成无障碍编程教程语音 1. 这不是“读出来就行”的语音&#xff0c;而是真正听得懂代码的语音助手 你有没有想过&#xff0c;一段Python函数说明、一个React组件生命周期图解、甚至一段带缩进和符号的JSON结构&…...