江科大STM32入门——UART通信笔记总结

news2025/1/10 9:56:42

wx:嵌入式工程师成长日记

ddd39e6b19e14e33897aa6213919c759.png

1、简介

  • 简单双向串口通信有两根通信线(发送端TX和接收端RX)
  • TX与RX要交叉连接
  • 当只需单向的数据传输时,可以只接一根通信线
  • 当电平标准不一致时,需要加电平转换芯片
  • 传输模式:全双工;时钟:同/异步;设备:点对点

图片

图片

【电平标准】

电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常用的电平标准有如下三种︰

TTL电平:+3.3V或+5V表示1,0V表示0

RS232电平(大机器):-3~-15V表示1,+3~+15V表示0

RS485电平:两线压差+2~+6V表示1,-2~-6V表示0(差分信号)抗干扰(可达上千米)

3、串口参数及时序

  • 波特率∶串口通信的速率(决定每隔多久发送一位)
  • 起始位︰标志一个数据帧的开始,固定为低电平
  • 数据位︰数据帧的有效载荷
  • 校验位︰用于数据验证,根据数据位计算得来
  • 停止位︰用于数据帧间隔,固定为高电平

图片

图片

校验方式:奇偶校验、和校验、CRC校验、LRC校验

(二)USART外设

1、USART简介

  • UART:通用异步收/发器
  • USART: 通用同步/异步收发器

注:这里的同步模式,多了一个仅支持输出的时钟,是兼容别的协议或者特殊用途而设计;不支持两个USART之间进行同步通信。

  • USART是STM32内部集成的硬件外设,可根据数据寄存器的一个字节数据自动生成数据帧时序,从TX引脚发送出去,也可自动接收RX引脚的数据帧时序,拼接为一个字节数据,存放在数据寄存器里。
  • 自带波特率发生器,最高达4.5Mbits/s
  • 可配置参数:数据位长度(8/9)、停止位长度(0.5/1/1.5/2),即间隔
  • 可选校验位(无校验/奇校验/偶校验)
  • 支持同步模式、硬件流控制、DMA、智能卡、IrDA(红外通信)、LIN(局域网通信协议)

【硬件流控制】如果数据发送得过快来不及接收,那么就可以通过这个来控制USART处于可收发的状态,一般不用。

  • STM32F103C8T6 USART资源:USART1、USART2、USART3

2、USART框图

图片

TX/RX引脚,一个发送一个接收。

DR寄存器:占用同一个地址,但是硬件上是两个寄存器,TDR发送数据寄存器、RDR接收数据寄存器。

移位寄存器:一个发送,从寄存器转移(低位往高位发送);一个接收,转移到寄存器(高位往低位接收)。通过标志位进行判断数据接收/发送完成。

SCK输出:用于兼容其他协议。

唤醒单元:串口实现挂载多设备,可以给串口分配一个地址,当发送指定地址时,此设备唤醒开始工作。当你发送别的设备地址时,别的设备就唤醒工作,没收到的就保持沉默。

中断申请位:就是状态寄存器这里的各种标志位,标志位的TXE发送寄存器,RXNE接收寄存器非空,是判断发送和接收状态的必要标志位

USART中断控制:配置中断是不是能通向NVIC

波特率发生器:分频器,APB时钟进行分频,得到发送和接收移位的时钟。

图片

3、USART基本结构

图片

发送接收移位寄存器硬件上看着有四个,但实际软件成眠只有一个DR寄存器供我们读写。

(三)数据帧解析

图片

1、字长设置

图片

图片

2、配置停止位

图片

3、USART输入数据策略

起始位侦测:数据采样位置对齐正中间

数据采样流程:可以对噪声进行判断,三次采样规则(全一致,采样电平不同,则按次数最多的考虑),但凡有不一致的就置位NE,代表有噪声。

4、波特率发生器

发送器和接收器的波特率由波特率寄存器BRR里的DIV确定

计算公式:波特率= fPCLkK2/1/(16*DIV)

图片

(四)UART数据传输流程:

图片

一个数据帧:起始位+数据位+(校验位)+停止位

(五)UART程序配置代码:

图片

1.UART初始化配置:

/* 配置USART1的硬件参数 */    huart1.Instance = USART1; // 指定huart1结构体中的Instance成员为USART1    huart1.Init.BaudRate = 115200; // 设置波特率为115200    huart1.Init.WordLength = UART_WORDLENGTH_8B; // 设置数据位长度为8位    huart1.Init.StopBits = UART_STOPBITS_1; // 设置停止位为1位    huart1.Init.Parity = UART_PARITY_NONE; // 设置无奇偶校验位    huart1.Init.Mode = UART_MODE_TX_RX; // 设置USART1为全双工模式(发送和接收)    huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; // 设置不使用硬件流控制    huart1.Init.OverSampling = UART_OVERSAMPLING_16; // 设置过采样为16倍    huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; // 禁用一位采样    huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1; // 设置时钟预分频器为1(不预分频)    huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; // 禁用高级特性初始化 

2.字符发送

//发送字符void UART_Putc(u8 c){  while(UART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET);  USART_SendData(USART1,c);}

3.字符接收

//接收字符u8 UART_Getc(void){  while(UART_GetFlagStatus(USART1,USART_FLAG_RXNE) == RESET);  return (u8)USART_ReceiveData(USART1);}

4.字符串接收

//接收字符串函数void UART_Gets(u8* buf,u32 len){  int i;  for(i=0;i<(len-1);i++)  {    buf[i] = UART_Getc();    if(buf[i]=='\n')      break;  }  buf[i-1]='\0';}

串口中断:

void USART1_IRQHandler(void){u8 c;//判断是否是串口1的接收数据产生的中断if(USART_GetITStatus (USARTI,USART_IT_RXNE)!= RESET){//清除中断位USART_ClearITPendingBit(USART1,USART_IT_RXNE);//读取接收到的数据c =USART_ReceiveData(USART1);//将读取到的数据暂存到大的存储区中UART_RxBuff[UART_RxCounter++]=c;//上位机的ssCOMT具发送的字符串:"led on\r\n\0"if(c =='\n'){//认为已经读完了//此时RxCounter为\0字符的下标UART_RxBuff[UART_RxCounter-2]=\0";UART_RxCounter=0;}}}

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

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

相关文章

分布式主键ID生成方式-snowflake雪花算法

这里写自定义目录标题 一、业务场景二、技术选型1、UUID方案2、Leaf方案-美团&#xff08;基于数据库自增id&#xff09;3、Snowflake雪花算法方案 总结 一、业务场景 大量的业务数据需要保存到数据库中&#xff0c;原来的单库单表的方式扛不住大数据量、高并发&#xff0c;需…

创建基本的 Electron 应用项目的详细步骤

创建一个基本的 Electron 应用项目的详细步骤。我们将从安装 Node.js 开始&#xff0c;然后创建项目文件夹并初始化 Electron 项目。 1. 安装 Node.js 首先&#xff0c;确保你已经安装了 Node.js 和 npm。你可以在终端中运行以下命令来检查是否已经安装&#xff1a; node -v…

对话新晋 Apache SeaTunnel Committer:张圣航的开源之路与技术洞察

近日&#xff0c;张圣航被推选为 Apache SeaTunnel 的 Committer成员。带着对技术的热情和社区的责任&#xff0c;他将如何跟随 Apache SeaTunnel 社区迈向新的高度&#xff1f;让我们一起来聆听他的故事。 自我介绍 请您简单介绍一下自己&#xff0c;包括职业背景、当前的工作…

超完整Docker学习记录,Docker常用命令详解

前言 关于国内拉取不到docker镜像的问题&#xff0c;可以利用Github Action将需要的镜像转存到阿里云私有仓库&#xff0c;然后再通过阿里云私有仓库去拉取就可以了。 参考项目地址&#xff1a;使用Github Action将国外的Docker镜像转存到阿里云私有仓库 一、Docker简介 Do…

JVM实战—OOM的定位和解决

1.如何对系统的OOM异常进行监控和报警 (1)最佳的解决方案 最佳的OOM监控方案就是&#xff1a;建立一套监控平台&#xff0c;比如搭建Zabbix、Open-Falcon之类的监控平台。如果有监控平台&#xff0c;就可以接入系统异常的监控和报警&#xff0c;可以设置当系统出现OOM异常&…

你知道智能家居与fpc有哪些关联吗?【新立电子】

智能家居&#xff0c;作为现代科技与家居生活深度融合的产物&#xff0c;它不仅仅是一种技术革新&#xff0c;更是一种生活理念的升级&#xff0c;将家居环境打造成为一个更加智能、舒适和安全的生活空间。 智能家居的核心在于其通过互联网、物联网、人工智能等技术手段&#…

STM32 : PWM 基本结构

这张图展示了PWM&#xff08;脉冲宽度调制&#xff09;的基本结构和工作流程。PWM是一种用于控制功率转换器输出电压的技术&#xff0c;通过调整信号的占空比来实现对负载的精确控制。以下是详细讲解&#xff1a; PWM 基本结构 1. 时基单元 ARR (Auto-reload register): 自动…

STM32之一种双通路CAN总线消息备份冗余处理方法(十三)

STM32F407 系列文章 - Dual-CANBus-ProMethod&#xff08;十三&#xff09; 目录 前言 一、现状分析 二、解决思路 1.应用场景网络结构图 2.数据发送流程 3.数据接收流程 4.用到的模块 1.CAN网络速率及时间片分配 2.CAN网络消息ID组成 3.设备节点定义 4.数据格式说明…

内网穿透的应用-Ubuntu本地Docker部署Leantime项目管理工具随时随地在线管理项目

文章目录 前言1.关于Leantime2.本地部署Leantime3.Leantime简单实用4.安装内网穿透5.配置Leantime公网地址6. 配置固定公网地址 前言 本文主要介绍如何在本地Linux系统使用Docker部署Leantime&#xff0c;并结合cpolar内网穿透工具轻松实现随时随地查看浏览器页面&#xff0c;…

VulnHub-Acid(1/100)

参考链接&#xff1a; ​​​​​​​【VulnHub】Acid靶场复盘-CSDN博客 靶场渗透&#xff08;二&#xff09;——Acid渗透_ambassador 靶场渗透-CSDN博客 网络安全从0到0.5之Acid靶机实战渗透测试 | CN-SEC 中文网 Vulnhub靶场渗透练习(四) Acid - 紅人 - 博客园 红日团队…

HTML5实现好看的端午节网页源码

HTML5实现好看的端午节网页源码 前言一、设计来源1.1 网站首页界面1.2 登录注册界面1.3 端午节由来界面1.4 端午节习俗界面1.5 端午节文化界面1.6 端午节美食界面1.7 端午节故事界面1.8 端午节民谣界面1.9 联系我们界面 二、效果和源码2.1 动态效果2.2 源代码 源码下载结束语 H…

git merge与rebase区别以及实际应用

在 Git 中&#xff0c;merge 和 rebase 是两种将分支的更改合并到一起的常用方法。虽然它们都可以实现类似的目标&#xff0c;但它们的工作方式和效果有所不同。 1. Git Merge 定义&#xff1a;git merge 是将两个分支的历史合并在一起的一种操作。当你执行 git merge 时&…

Matlab APP Designer

我想给聚类的代码加一个图形化界面&#xff0c;需要输入一些数据和一些参数并输出聚类后的图像和一些评价指标的值。 gpt说 可以用 app designer 界面元素设计 在 设计视图 中直接拖动即可 如图1&#xff0c;我拖进去一个 按钮 &#xff0c;图2 红色部分 出现一行 Button 图…

PyCharm 引用其他路径下的文件报错 ModuleNotFound 或报红

PyCharm 中引用其他路径下的文件提示 ModuleNotFound&#xff0c;将被引用目录添加到系统路径&#xff1a; # # 获取当前目录 dir_path os.path.dirname(os.path.realpath(__file__)) # # 获取上级目录 parent_dir_path os.path.abspath(os.path.join(dir_path, os.pardir))…

【HarmonyOS NEXT】鸿蒙应用点9图的处理(draw9patch)

【HarmonyOS NEXT】鸿蒙应用点9图的处理&#xff08;draw9patch&#xff09; 一、前言&#xff1a; 首先在鸿蒙中是不支持安卓 .9图的图片直接使用。只有类似拉伸的处理方案&#xff0c;鸿蒙提供的Image组件有与点九图相同功能的API设置。 可以通过设置resizable属性来设置R…

SOLID原则学习,开闭原则

文章目录 1. 定义2. 开闭原则的详细解释3. 实现开闭原则的方法4. 总结 1. 定义 开闭原则&#xff08;Open-Closed Principle&#xff0c;OCP&#xff09;是面向对象设计中的五大原则&#xff08;SOLID&#xff09;之一&#xff0c;由Bertrand Meyer提出。开闭原则的核心思想是…

【Vue3中使用crypto-js】crypto-js加密解密用法

目录 1、安装crypto2、创建crypto.js文件3、在main.js主文件中进行引用4、页面中进行使用5、实现效果展示6、加密模式解析以及iv参数使用 1、安装crypto npm install crypto-js 如果是在Typescript版本需要再安装 npm install --save types/crypto-js2、创建crypto.js文件 注…

跨界融合:人工智能与区块链如何重新定义数据安全?

引言&#xff1a;数据安全的挑战与现状 在信息化驱动的数字化时代&#xff0c;数据已成为企业和个人最重要的资产之一。然而&#xff0c;随着网络技术的逐步优化和数据量的爆发式增长&#xff0c;数据安全问题也愈变突出。 数据安全现状&#xff1a;– 数据泄露驱动相关事件驱…

简单易用的PDF工具箱

软件介绍 PDF24 Creator是一款简单易用的PDF工具箱&#xff0c;而且完全免费&#xff0c;没有任何功能限制。既可以访问官网在线使用各种PDF工具&#xff0c;也可以下载软件离线使用各种PDF工具。 软件功能 1、PDF转换 支持将多种文件格式&#xff08;Word、PowerPoint、Exc…

低秩信息收集_0109

系列博客目录 文章目录 系列博客目录LoRA: Low-Rank Adaptation of Large Language Models传统模型适配的局限性&#xff1a;尽管研究界致力于通过添加适配器层或优化输入层激活来提高模型适配效率&#xff0c;这些方法在大型模型和延迟敏感的环境中存在局限。适配器层尽管参数…