STM32 串口USART通讯驱动

前言

本篇文章对串口Usart进行讲解,为后面的esp8266和语音模块控制打好基础。

1.串口USART

USART(Universal Synchronous/Asynchronous Receiver/Transmitter,通用同步 / 异步收发器) 是一种常见的串行通信接口,广泛应用于嵌入式系统、单片机、传感器、通信设备等领域,主要用于设备之间的数据传输。
它的核心功能和作用可以从以下几个方面理解:

1.1.实现设备间的串行通信

串行通信:数据通过一根或几根信号线逐位传输(与并行通信的多线同时传输相比),节省硬件引脚资源,适合远距离或低成本的数据交换。
连接场景:例如单片机(如 STM32)与传感器、蓝牙模块(如 HC-05)、Wi-Fi 模块(如 ESP8266)、上位机(如电脑)等设备之间的通信,通常通过 USART 接口连接。

1.2. 支持同步和异步两种通信模式

USART 的 “同步 / 异步” 特性使其灵活性很高:
异步模式(最常用):不需要专用的时钟线,双方通过预先约定的波特率(数据传输速率,如 9600bps、115200bps)同步数据,仅通过TX(发送线) 和RX(接收线) 传输数据。例如:电脑通过 USB 转 TTL 模块与 ESP8266 的通信,就是用异步模式,通过串口助手发送 AT 指令。
同步模式:需要额外的时钟线(SCK)来同步数据传输,适合对时序要求严格的场景(如与某些传感器或外设的高速通信)。

1.3. 数据传输的基本原理

数据以 “帧” 为单位传输,每一帧包含:起始位(标志数据开始)、数据位(实际传输的 8 位或 9 位数据)、校验位(可选,用于验证数据正确性)、停止位(标志数据结束)。
双方需约定相同的波特率(如 9600、115200)、数据位、校验位、停止位(称为 “串口参数”),否则会出现数据传输错误。

1.4. 在嵌入式开发中的典型应用

指令控制:通过 USART 发送 AT 指令配置模块(如 ESP8266 的 Wi-Fi 连接、蓝牙模块的配对)。
数据采集:传感器(如温湿度传感器、GPS 模块)通过 USART 向上位机或单片机发送采集到的数据。
调试输出:单片机通过 USART 向上位机(如电脑)发送调试信息(如打印变量值、程序运行状态),方便开发调试。
设备联动:多个单片机或模块通过 USART 组成通信网络,实现数据共享或协同控制(如智能家居中多个设备的联动)。

1.5. 与 UART 的区别

UART(Universal Asynchronous Receiver/Transmitter) 仅支持异步通信,没有同步模式。
USART 是 UART 的增强版,既支持异步通信,也支持同步通信,功能更全面。在实际应用中,若无需同步模式,USART 通常也以异步模式使用,此时可视为 UART。
总之,USART 是嵌入式系统中设备间 “对话” 的重要桥梁,通过简单的硬件连接(通常只需 TX、RX、GND 三根线)和软件配置,即可实现稳定的数据传输,是物联网、智能家居、工业控制等领域的基础通信接口。

1.6.硬件介绍

2.代码实现

2.1.STM32Cubemx配置

我们这里以输出调试信息所用到的USART串口1为例。PA9为串口1的TXD、PA10为串口1的RXD。
我们将串口UART1配置为异步功能,Mode选择为Asynchronous,与PC端的通讯波特率为115200 Bit/s。
因为我们只是向PC端发送一些调试信息,无需接收PC端的数据,所以我们无需打开中断功能。

 

2.2.fputc重定向支持printf

在 STM32 开发中,标准库函数(如printf())默认输出到控制台(如电脑终端),但在嵌入式系统中,通常需要将输出重定向到串口。通过重写fputc()函数,可以实现以下功能:
  1. 使用printf()调试:将调试信息通过串口发送到电脑,方便开发时查看。
  2. 与外部设备通信:通过串口向其他设备发送数据。
该函数的作用是将字符ch,通过 USART1 串口发送出去,并等待发送完成。
int fputc(int ch, FILE *f)
{//USART1->SR:USART1 的状态寄存器,其中第 6 位(TXE)表示发送缓冲区是否为空。//0x40:二进制为0100 0000,用于检查TXE位。//循环等待:直到TXE位被置 1(发送缓冲区为空),才继续执行下一步。while( (USART1->SR & 0x40) == 0 );//USART1->DR:USART1 的数据寄存器,写入此寄存器将触发串口发送。//(uint8_t) ch:将字符转换为无符号 8 位整数后发送。USART1->DR = (uint8_t) ch;//返回发送的字符(作为整数),表示操作成功。return ch;
}

2.3.printf使用

int main()
{printf("Demo run!!!\n");  delay_ms(1000);  
}

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

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

相关文章

pytorch版本densenet代码讲解

DenseNet 模型代码详解 下面是 DenseNet 模型代码的逐部分详细解析: 1. 导入模块 import re from collections import OrderedDict from functools import partial from typing import Any, Optionalimport torch import torch.nn as nn import torch.nn.functional…

前端常见设计模式深度解析

# 前端常见设计模式深度解析一、设计模式概述 设计模式是解决特定问题的经验总结,前端开发中常用的设计模式可分为三大类: 创建型模式:处理对象创建机制(单例、工厂等)结构型模式:处理对象组合(…

React 学习(3)

核心API——React.creatElement()方法优点:将创建元素、添加属性和事件、添加内容和子元素等使用原生dom需要进行复杂操作才能实现的功能集成在一个API中。1.该方法接收三个参数第一个是要创建的元素的名称(小写是因为如果,大写开头会被react…

倾斜摄影无人机飞行航线规划流程详解

在倾斜摄影测量项目中,航线规划的严谨性直接决定了最终三维模型的质量与完整性。照片覆盖不全、模型空洞、纹理模糊或分辨率不达标等问题,往往源于规划阶段对关键细节的疏忽。本文将系统梳理倾斜摄影无人机航线规划的核心流程与关键要点,旨在…

Minio大文件分片上传

一、引入依赖 <dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.3.3</version></dependency> 二、自定义Minio客户端 package com.gstanzer.video.controller;import com.google.common.c…

Jenkins 插件深度应用:让你的CI/CD流水线如虎添翼 [特殊字符]

Jenkins 插件深度应用&#xff1a;让你的CI/CD流水线如虎添翼 &#x1f680; 嘿&#xff0c;各位开发小伙伴&#xff01;今天咱们来聊聊Jenkins的插件生态系统。如果说Jenkins是一台强大的引擎&#xff0c;那插件就是让这台引擎发挥最大威力的各种零部件。准备好了吗&#xff1…

密码学(斯坦福)

密码学笔记 \huge{密码学笔记} 密码学笔记 斯坦福大学密码学的课程笔记 课程网址&#xff1a;https://www.bilibili.com/video/BV1Rf421o79E/?spm_id_from333.337.search-card.all.click&vd_source5cc05a038b81f6faca188e7cf00484f6 概述 密码学的使用背景 安全信息保护…

代码随想录算法训练营第四十六天|动态规划part13

647. 回文子串 题目链接&#xff1a;647. 回文子串 - 力扣&#xff08;LeetCode&#xff09; 文章讲解&#xff1a;代码随想录 思路&#xff1a; 以dp【i】表示以s【i】结尾的回文子串的个数&#xff0c;发现递推公式推导不出来此路不通 以dp【i】【j】表示s【i】到s【j】的回…

基于四种机器学习算法的球队数据分析预测系统的设计与实现

文章目录 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主项目介绍项目展示随机森林模型XGBoost模型逻辑回归模型catboost模型每文一语 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主 项目介绍 本项目旨在设计与实现…

http、SSL、TLS、https、证书

一、基础概念 1.HTTP HTTP (超文本传输协议) 是一种用于客户端和服务器之间传输超媒体文档的应用层协议&#xff0c;是万维网的基础。 简而言之&#xff1a;一种获取和发送信息的标准协议 2.SSL 安全套接字层&#xff08;SSL&#xff09;是一种通信协议或一组规则&#xf…

在 C++ 中,判断 `std::string` 是否为空字符串

在 C 中&#xff0c;判断 std::string 是否为空字符串有多种方法&#xff0c;以下是最常用的几种方式及其区别&#xff1a; 1. 使用 empty() 方法&#xff08;推荐&#xff09; #include <string>std::string s; if (s.empty()) {// s 是空字符串 }特性&#xff1a; 时间…

【Harmony】鸿蒙企业应用详解

【HarmonyOS】鸿蒙企业应用详解 一、前言 1、应用类型定义速览&#xff1a; HarmonyOS目前针对应用分为三种类型&#xff1a;普通应用&#xff0c;游戏应用&#xff0c;企业应用。 而企业应用又分为&#xff0c;企业普通应用和设备管理应用MDM&#xff08;Mobile Device Man…

Linux云计算基础篇(8)

VIM 高级特性插入模式按 i 进入插入模式。按 o 在当前行下方插入空行并进入插入模式。按 O 在当前行上方插入空行并进入插入模式。命令模式:set nu 显示行号。:set nonu 取消显示行号。:100 光标跳转到第 100 行。G 光标跳转到文件最后一行。gg 光标跳转到文件第一行。30G 跳转…

Linux进程单例模式运行

Linux进程单例模式运行 #include <iostream> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>int write_pid(const cha…

【Web 后端】部署服务到服务器

文章目录 前言一、如何启动服务二、挂载和开机启动服务1. 配置systemctl 服务2. 创建server用户3. 启动服务 总结 前言 如果你的后端服务写好了如果部署到你的服务器呢&#xff0c;本次通过fastapi写的服务实例&#xff0c;示范如何部署到服务器&#xff0c;并做服务管理。 一…

国产MCU学习Day5——CW32F030C8T6:窗口看门狗功能全解析

每日更新教程&#xff0c;评论区答疑解惑&#xff0c;小白也能变大神&#xff01;" 目录 一.窗口看门狗&#xff08;WWDG&#xff09;简介 二.窗口看门狗寄存器列表 三.窗口看门狗复位案例 一.窗口看门狗&#xff08;WWDG&#xff09;简介 CW32F030C8T6 内部集成窗口看…

2025年文件加密软件分享:守护数字世界的核心防线

在数字化时代&#xff0c;数据已成为个人与企业的宝贵资产&#xff0c;文件加密软件通过复杂的算法&#xff0c;确保信息在存储、传输与共享过程中的保密性、完整性与可用性。一、文件加密软件的核心原理文件加密软件算法以其高效性与安全性广泛应用&#xff0c;通过对文件数据…

node.js下载教程

1.项目环境文档 语雀 2.nvm安装教程与nvm常见命令,超详细!-阿里云开发者社区 C:\Windows\System32>nvm -v 1.2.2 C:\Windows\System32>nvm list available Error retrieving "http://npm.taobao.org/mirrors/node/index.json": HTTP Status 404 C:\Window…

(AI如何解决问题)在一个项目,跳转到外部html页面,页面布局

问题描述目前&#xff0c;ERP后台有很多跳转外部链接的地方&#xff0c;会直接打开一个tab显示。因为有些页面是适配手机屏幕显示&#xff0c;放在浏览器会超级大。不美观&#xff0c;因此提出优化。修改前&#xff1a;修改后&#xff1a;思考过程1、先看下代码&#xff1a;log…

网络通信协议与虚拟网络技术相关整理(上)

#作者&#xff1a;程宏斌 文章目录 tcp协议udp协议arp协议icmp协议dhcp协议BGP协议OSPF协议BGP vs OSPF 对比表VLAN&#xff08;Virtual LAN&#xff09;VXLAN&#xff08;Virtual Extensible LAN&#xff09;IPIP&#xff08;IP-in-IP&#xff09;vxlan/vlan/ipip网桥/veth网…