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

news2024/11/17 10:36:51

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

工程文件:放在百度云盘里,需要的自行下载!!!
链接: 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:接下来我们看一下通过串口工具给开发板发消息,我们通过接收中断来做

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

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

相关文章

2万字长文助你快速入门AIGC:包含底层原理、应用场景、热门工具、行业现状…

最近大家热议的ChatGPT和AI绘画工具的底层技术原理是什么?是如何发展到现在的?有哪些应用场景、热门工具?AIGC产业上下游有哪些公司?作为普通用户,我们还能接触哪些应用AI技术打造的商业解决方案?…… 我们…

RK 方案VOP 显示接口的链接关系以及DTS如何配置

这图显示各vp 支持情况 如下图VP0 支持DSI0 DSI1 EDP LVDS HDMI 显示接口,如果我们一方案需要点MIPI 屏 和HDMI out, 如果VP0 链接MIPI DSI0 那么VP0 就不能再选择了,只能VP1 链接HDMI out 了。因为VP2不至此HDMI,所有就只有选择VP1 链接HDMI…

随记——机器学习

前言 本来有个500块钱的单子,用机器学习做一个不知道什么鸟的识别,正好有数据集,跑个小项目,过一下机器学习图像识别的流程,用很短的时间记录下来..... 一、数据预处理 将数据集分为训练集和测试集,直接…

【HarmonyOS】SaveButton保存图片

SaveButton组件把图片显示到相册中的方法demo,支持组件截图、url网络图片、base64格式图片。注意事项: 1、不支持自定义SaveButton样式。 2、下载按钮被遮挡一部分,也无法保存到相册。 import photoAccessHelper from ohos.file.photoAcces…

使用 pypdf 给 PDF 添加目录书签

""" dir.txt的形式 第1章 计算机系统基础知识 1 1.1 嵌入式计算机系统概述 1 1.2 数据表示 4 1.2.1 进位计数制及转换 4 1.2.2 数值型数据的表示 6 第2章 嵌入式系统硬件基础知识 56 2.1 数字电路基础 56 2.1.1 信号特征 56 2.1.2 组合逻辑电路和时序逻辑电路 5…

为什么现在的网站设计大多都非常简洁,越来越扁平化

网站设计趋向简洁和扁平化,反映了现代设计理念的转变和技术的进步。以下是对这一现象的具体分析: 用户体验优先:用户更倾向于简单直接的界面,这有助于快速找到所需信息。扁平化设计通过减少视觉干扰,使得内容更加突出…

哪些因素会影响六西格玛效果的显现时间?

在探讨哪些因素会影响六西格玛效果的显现时间时,我们不得不深入剖析六西格玛管理方法的本质及其在企业中的实施过程。六西格玛作为一种旨在通过减少缺陷和变异来提高产品和服务质量的策略,其成功实施并非一蹴而就,而是受到多种复杂因素的共同…

Llama 系列简介与 Llama3 预训练模型推理

1. Llama 系列简介 1.1 Llama1 由 Meta AI 发布,包含 7B、13B、33B 和 65B 四种参数规模的开源基座语言模型 数据集:模型训练数据集使用的都是开源的数据集,总共 1.4T token 模型结构:原始的 Transformer 由编码器&#xff08…

Git 与远程分支

90.远程仓库和分支 我们经常需要对远程仓库里的分支进行更新。 ‍ 当从远程库 clone 时,默认情况下,只会拉取 master ​分支,并且会将本地的 master 分支和远程的 master 分支关联起来: $ git branch * master‍ ‍ 推送本地…

什么是分布式缓存,它是如何工作的?

嗨,你好啊,我是猿java 在日常开发中,我们经常会使用到缓存,当数据集较小时,通常将所有缓存数据保存在一台服务器上就足够了,但是当数据集较大时,我们需要将缓存数据分布在多个服务器上&#xf…

无线领夹麦克风怎么挑选?选购麦克风需要注意的五大选购陷阱!

无线领夹麦克风只所以成为现在自媒体行业的主流拾音设备,很大程度取决于它的轻巧的设计以及便携性。相较于传统的手持麦克风,领夹麦在使用时无需手持,直接佩戴在衣领上即可使用,腾出的双手可以更好的投入到录制当中,在…

Python与SQL Server数据库结合导出Excel并做部分修改

Python与SQL Server数据库结合导出Excel并做部分修改 需求:在数据库中提取需要的字段内容;并根据字段内容来提取与拆分数据做为新的列最后导出到Excel文件 # -*- coding: utf-8 -*- import pandas as pd import re import pymssql import timestart_ti…

Activiti的Web在线工作流设计器的几种搭建方式

说明 Activiti Activiti是一个使用Java开发的工作流流程管理(BPM)平台,可以帮助开发者和企业自动化管理业务流程。它提供了一整套工具,用于定义、执行、监控和优化业务流程。Activiti支持BPMN 2.0标准,具有强大的扩展能力和易用性&#xff…

Git GUI操作流程

1,点击运行 Gt GUI 2,界面如下 3,点击Creat new Repository或者在菜单栏点击Repository--new 4,点击Browse选择目录,点击create,创建本地git仓库 5,对应盘里生成一个.git文件,用于版本管理 6&am…

2024最新测评:低代码平台在企业复杂应用场景的适用性如何?

低代码平台种类多,不好一概而论。但最近有做部分低代码平台的测评,供大家参考。 一个月前接到老板紧急任务:调研有没有一款低代码平台能开发我司的软件场景。我司是一家快速发展中的制造业企业,业务遍布全国,需要一个…

DAY81服务攻防-开发框架安全SpringBootStruts2LaravelThinkPHPCVE 复现

知识点: 1、PHP-框架安全-Thinkphp&Laravel 2、J2EE-框架安全-SpringBoot&Struts2 常见语言开发框架: PHP:Thinkphp Laravel YII CodeIgniter CakePHP Zend等 JAVA:Spring MyBatis Hibernate Struts2 Springboot等 P…

Elasticsearch讲解

1.Elasticsearch基本知识 1.基本认识和安装 Elasticsearch是由elastic公司开发的一套搜索引擎技术,它是elastic技术栈中的一部分。完整的技术栈包括: Elasticsearch:用于数据存储、计算和搜索 Logstash/Beats:用于数据收集 Kib…

Dos.ORM简单说明

1 下载Dos.Tools-master 地址:Dos.Tool: 实体生成工具,成熟轻量级ORM、上手简单、性能高、功能强大! 2 Dos.ORM仅支持DbFirst模式,即必须先有数据库,这里以Sql Server为例 3 新建项目,添加引用Dos.ORM.dll&…

3.javaweb-Servlet与过滤器

javaweb-Servlet与过滤器 文章目录 javaweb-Servlet与过滤器一、Servlet:server applet二、Servlet做了什么?三、Servlet是什么?四、jsp与Servlet关系五、Servlet API1.主要Servlet API介绍2.如何创建Servlet3.Servlet中主要方法4.ServletReq…

使用Docker快速本地部署RSSHub结合内网穿透访问RSS订阅源

文章目录 前言1. Docker 安装2. Docker 部署Rsshub3. 本地访问Rsshub4. Linux安装Cpolar5. 配置公网地址6. 远程访问Rsshub7. 固定Cpolar公网地址8. 固定地址访问 前言 今天和大家分享的是如何在本地快速简单部署Rsshub工具,并结合cpolar内网穿透工具使用公网地址远…