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

STM32Cube串口USART发送接收数据

本文代码使用 HAL 库。

文章目录

  • 前言
  • 一、USART 同步/异步串行接收/发送器
  • 二、USART 原理图
  • 三、CubeMX 创建工程
  • 四、usart.c 文件解析
  • 五,设计实验:
      • 在 串口输入字符点亮led
      • 实验现象:
  • 总结

前言

这篇文章介绍 实现 USART 异步模式下 通过 串口助手 发送,接收 数据


一、USART 同步/异步串行接收/发送器

USART(Universal Synchronous Asynchronous Receiver Transmitter)是一种通用的串行通信接口,它可以用来 发送 和 接收 数据。

USART 可以用来 连接两个设备 ,以实现数据传输。它可以用来连接计算机、打印机、终端机、网络设备等。

USART 可以使用 同步 或 异步 方式传输数据。

  • 在 同步 模式下,发送和接收的数据都是 同步 的,即发送和接收的数据都是以相同的速率传输的。在绝大多数场合下发送端和接收端采用的都是同一个时钟
  • 而在 异步 模式下,发送和接收的数据是异步的,即发送和接收的数据可以以不同的速率传输。发送端和接收端可以有各自独立的时钟来控制数据的发送和接收,这两个时钟各自独立,互不同步

二、USART 原理图

任何 USART 双向 通信至少需要 两个 脚:接收数据输入(RX) 和 发送数据输出(TX) 。

  • RX:接收数据串行输。通过过采样技术来区别数据和噪音,从而恢复数据。
  • TX:发送数据输出。当发送器被禁止时,输出引脚恢复到它的I/O端口配置。

从下图可以看到 USART 的发送引脚为PA9 USART1_TX, 接收引脚为 PA10 USART1_RX在这里插入图片描述

三、CubeMX 创建工程

  1. 选择芯片。
    在这里插入图片描述
  2. 选择 Debug 模式
    在这里插入图片描述
  3. 选择外部时钟
    在这里插入图片描述
  4. 配置系统时钟,在 红框中输入 72 ,然后点击 回车 两次,即可配置好
    在这里插入图片描述
  5. 设置 io 端口
    在这里插入图片描述
  6. 设置为 异步通信。
    在这里插入图片描述
  7. 可 重新设置名字
    在这里插入图片描述
  8. 设置工程模式和版本
    在这里插入图片描述
  9. 选取加入.c /.h文件(便于编写代码)
    在这里插入图片描述
  10. 创建工程
    在这里插入图片描述
    然后 打开工程,可以看到我们的 usart.c , usart.h
    在这里插入图片描述

四、usart.c 文件解析

  1. 使用 UART_HandleTypeDef 结构体 定义变量具象 USART 对象。huart1usart.h 中被定义。
    在这里插入图片描述
  2. 使用 MX_USART1_UART_Init 设置 USART1 的参数(波特率,数据位长度,奇偶校验位等)
    使用 HAL_UART_Init() 初始化结构体变量,完成对该 USART 外设的初始化。
    在这里插入图片描述
  3. HAL_UART_MspInit( ) 函数中完成对 时钟 的 使能 和 GPIO/DMA 等的配置。
    在这里插入图片描述
  4. 关闭使能。
    在这里插入图片描述

五,设计实验:

在 串口输入字符点亮led

  • 在 串口 输入 ’ A ',则 led 点亮
  • 在 串口 输入 ’ a ',则 led 熄灭
  1. 串口发送函数
HAL_UART_Transmit ( UART_HandleTypeDef * huart , uint8_t * pData , uint16_t Size , uint32_t Timeout );
  1. 串口接收函数
HAL_UART_Receive_IT (UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
  1. printf 重定向:
int fputc(int str, FILE *f)     /* printf 打印 */
{while(HAL_UART_Transmit(&huart1, (uint8_t *)&str, 1, 300) != HAL_OK);return 0;
}
int fgetc( FILE *f)       /* scanf 输入 */
{char c = 0;while(HAL_UART_Receive(&huart1, (uint8_t *)&c, 1, 300) != HAL_OK);return c;
}
  1. 控制 led 亮灭。
    对于 led 的代码以及工程文件,可以参考我之前的文章,详细的介绍了 led
    STM32f103 CubeMX封装 led程序
uint8_t buff[128]={0};  /* 接收数据数组 */
buff[0] = getchar();   /* 获取字符 */switch(buff[0]){case 'A':{Blue_ON();    /* led 点亮 */printf("led is on !\r\n");}break;case 'a':{Blue_OFF();   /* led 熄灭 */printf("led is off !\r\n");}break;}

实验现象:

实验现象 我放在了 B占,有兴趣的可以看看:

STM32 串口USART 发送数据控制led亮灭


总结

下一篇文章 讲 USART 串口 中断

相关文章:

STM32Cube串口USART发送接收数据

本文代码使用 HAL 库。 文章目录前言一、USART 同步/异步串行接收/发送器二、USART 原理图三、CubeMX 创建工程四、usart.c 文件解析五,设计实验:在 串口输入字符点亮led实验现象:总结前言 这篇文章介绍 实现 USART 异步模式下 通过 串口助手…...

OpenFeign详解

OpenFeign是什么? OpenFeign: OpenFeign是Spring Cloud 在Feign的基础上支持了SpringMVC的注解,如RequesMapping等等。OpenFeign的FeignClient可以解析SpringMVC的RequestMapping注解下的接口,并通过动态代理的方式产生实现类&am…...

python多线程网络编程

背景 使用过flask框架后,我对request这个全局实例非常感兴趣。它在客户端发起请求后会保存着所有的客户端数据,例如用户上传的表单或者文件等。那么在很多客户端发起请求时,服务器是怎么去区分不同的request对象呢?当查看了大量的…...

BFS-走迷宫

题目描述 给定一个 NM 的网格迷宫 G。G 的每个格子要么是道路,要么是障碍物(道路用 1 表示,障碍物用 0 表示)。 已知迷宫的入口位置为 (x1,y1),出口位置为 (x2...

【蓝牙mesh】Lower协议层介绍

【蓝牙mesh】Lower协议层介绍 Lower层简介 Lower协议层用于处理网络层以下的功能,包括节点的广播、重传、路由和网络拓扑等,是实现蓝牙mesh网络的关键协议之一。其中Lower协议层中最主要的一部分工作就是mesh数据的分片和组包。 Lower层是将Upper层发过…...

Java-重排序,happens-before 和 as-if-serial 语义

目录1. 如何解决重排序带来的问题2. happens-before1. 如何解决重排序带来的问题 对于编译器,JMM 的编译器重排序规则会禁止特定类型的编译器重排序。对于处理器重排序,JMM 的处理器重排序规则会要求编译器在生成指令序列时,插入特定类型的内…...

Nginx安装及介绍

前言:传统结构上(如下图所示)我们只会部署一台服务器用来跑服务,在并发量小,用户访问少的情况下基本够用但随着用户访问的越来越多,并发量慢慢增多了,这时候一台服务器已经不能满足我们了,需要我们增加服务…...

【华为OD机试模拟题】用 C++ 实现 - 寻找路径 or 数组二叉树(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 获得完美走位(2023.Q1) 文章目录 最近更新的博客使用说明寻找路径 or 数组二叉树题目输入输出描述示例一输入输出示例二输入输出Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过…...

LINUX学习记录

回顾系列:两天的时间(2023.2.24-2023.2.25)重新学了遍Linux基础课,收获非常多,以前只会一些简单的Linux命令,对shell,git,管道,复杂Linux命令都不熟悉,学完之…...

华为OD机试用Python实现 -【狼羊过河 or 羊、狼、农夫过河】(2023-Q1 新题)

华为OD机试题 华为OD机试300题大纲狼羊过河 or 羊、狼、农夫过河题目描述输入描述输出描述说明示例一输入输出说明Python 代码实现代码实现思路华为OD机试300题大纲 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址…...

【SAP Abap】X-DOC:SAP ABAP 语法更新之Open SQL

SAP ABAP 语法更新之Open SQL1、前言2、演示1、前言 自从 SAP 推出 SAP ON HANA,与之相随的 AS ABAP NW 7.40 版本以后,ABAP 语法也有了较多的更新,本篇对 Open Sql的语法更新部分做一个DEMO演示。 NW 7.40 以前 OpenSQL 的限制&#xff1a…...

leetcode 困难 —— 数组中的逆序对(分治法)

题目: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 题解: ① 我最开始想的蠢方法(会超时,可跳过&#xff…...

02.24:图片的风格转换

Github网址:https://github.com/lengstrom/fast-style-transfer 在anaconda prompt中切换环境命令:activate 环境名 列出所有环境名:conda info --envs 安装环境:conda create -n 环境名 pythonx.x.x 删除某环境:co…...

[SSD综述 1.3] SSD及固态存储技术半个世纪发展史

在我们今天看来,SSD已不再是个新鲜事物。这多亏了存储行业的前辈们却摸爬滚打了将近半个世纪,才有了SSD的繁荣, 可惜很多前辈都没有机会看到。所有重大的技术革新都是这样,需要长期的技术积累,一代一代的工程师们默默的…...

PAT 1023 组个最小数(分数20)题目有bug

目录 题目描述: 题目讲解: 框架构建: 代码部分: 一个bug: 题目描述: 给定数字 0-9 各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(…...

QML 中的 5 大布局

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 在 QML 中,可以通过多种方式对元素进行布局 - 手动定位、坐标绑定定位、锚定位(anchors)、定位器和布局管理器。 说到 anchors,可能很多人都不太了解,它是 QML 中一个非常重要的概念,主要提供了一种相…...

使用Python进行数据分析——线性回归分析

大家好,线性回归是确定两种或两种以上变量之间互相依赖的定量关系的一种统计分析方法。根据自变量的个数,可以将线性回归分为一元线性回归和多元线性回归分析。一元线性回归:就是只包含一个自变量,且该自变量与因变量之间的关系是…...

我眼中的柔宇科技

关注、星标公众号,直达精彩内容来源:技术让梦想更伟大作者:李肖遥很早就知道了柔宇科技,当时是因为知道创始人刘自鸿,23岁清华本硕毕业,26岁获斯坦福大学电子工程博士学位,历时不超过3年&#x…...

Allegro如何快速把视图居中显示操作指导

Allegro如何快速把视图居中显示操作指导 用Allegro进行PCB设计的时候,为了方便检查和设计,时常需要将视图居中显示。一般地,会使用鼠标的中键进行放大和缩小,或者使用Zoom in和Zoom out来调整视图 Allegro还支持快速将视图居中 具体操作如下 点击View...

搜索相关功能

一、进入搜索页面 1.1 在pages下创建搜索页面为:search 1.2 在index.vue中点击进入搜素页面 onNavigationBarButtonTap(e){if(e.floatleft){uni.navigateTo({url:/pages/search/search})}},1.3 在pages.json中配置搜索页面头部 {"path" : "pages/…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

云计算——弹性云计算器(ECS)

弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...

基础测试工具使用经验

背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...

浅谈不同二分算法的查找情况

二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况&#xf…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、👨‍🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨‍&#x1f…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...

GitHub 趋势日报 (2025年06月06日)

📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...