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

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

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;}}}

相关文章:

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

wx&#xff1a;嵌入式工程师成长日记 1、简介 简单双向串口通信有两根通信线(发送端TX和接收端RX)TX与RX要交叉连接当只需单向的数据传输时&#xff0c;可以只接一根通信线当电平标准不一致时&#xff0c;需要加电平转换芯片 传输模式&#xff1a;全双工&#xff1b;时钟&…...

github gitbook写书

github创建新的仓库 在仓库中添加目录 ‘SUMMARY.md # Summary * [简介](README.md)gitbook 新建一个site https://www.gitbook.com/ 注册账号 取名字 一路 next&#xff0c;注意选免费版 最后 gitbook同步到github 你在主页可以看到 刚刚的test网站 点击右上角圈出来…...

探秘MetaGPT:革新软件开发的多智能体框架(22/30)

一、MetaGPT 引发的 AI 变革浪潮 近年来&#xff0c;人工智能大模型领域取得了令人瞩目的进展&#xff0c;GPT-3、GPT-4、PaLM 等模型展现出了惊人的自然语言处理能力&#xff0c;仿佛为 AI 世界打开了一扇通往无限可能的大门。它们能够生成流畅的文本、回答复杂的问题、进行创…...

【优选算法】Binary-Blade:二分查找的算法刃(下)

文章目录 1.山脉数组的峰顶索引2.寻找峰值3.寻找旋转排序数组中的最小值4.点名希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力&#xff01; 本篇接上一篇二分查找&#xff0c;主要通过部分题目熟悉二分查找的进阶使用&#xff0c;重点强调二段性&#xff0c;…...

Improving Language Understanding by Generative Pre-Training GPT-1详细讲解

Improving Language Understanding by Generative Pre-Training 2018.06 GPT-1 0.有监督、半监督、无监督 CV&#xff1a;ImageNet pre-trained model NLP&#xff1a;pre-trained model? 在计算机视觉中任务包含分类、检测、分割&#xff0c;任务类别数少&#xff0c;对应…...

分治算法——优选算法

本章我们要学习的是分治算法&#xff0c;顾名思义就是分而治之&#xff0c;把大问题分为多个相同的子问题进行处理&#xff0c;其中我们熟知的快速排序和归并排序用的就是分治算法&#xff0c;所以我们需要重新回顾一下这两个排序。 一、快速排序&#xff08;三路划分&#xf…...

EtherCAT转Modbus网关与TwinCAT3的连接及配置详述

在工业自动化控制系统中&#xff0c;常常需要整合不同的通信协议设备。本案例旨在展示如何利用捷米特JM-ECT-RTU协议转换网关模块&#xff0c;实现 EtherCAT 网络与 Modbus 设备之间的无缝连接&#xff0c;并在 TwinCAT3 环境中进行有效配置&#xff0c;以构建一个稳定可靠的自…...

Apache Hadoop YARN框架概述

一、YARN产生和发展简史 1.1背景 数据、程序、运算资源&#xff08;内存、CPU&#xff09;三者组在一起&#xff0c;才能完成数据的计算处理过程。在单机环境下&#xff0c;三者之间协调配合不是太大问题。为了应对海量数据的处理场景&#xff0c;Hadoop软件出现并提供了分布…...

三甲医院等级评审八维数据分析应用(八)--数据治理的持续改进与反馈机制篇

一、引言 1.1 研究背景与意义 当前三甲医院在数据管理方面暴露出诸多棘手问题。一方面,数据治理缺乏系统性与规范性,数据标准不统一,不同科室、信息系统之间的数据格式各异、编码混乱,导致数据整合与共享困难重重,严重制约了数据分析的准确性与深度。以某三甲医院为例,…...

XML通过HTTP POST 请求发送到指定的 API 地址,进行数据回传

代码结构说明 这段代码的主要功能是&#xff1a; 从指定文件夹中读取所有 XML 文件。 将每个 XML 文件的内容通过 HTTP POST 请求发送到指定的 API 地址。 处理服务器的响应&#xff0c;并记录每个文件的处理结果。 using System; using System.IO; using System.Net; usin…...

科大讯飞前端面试题及参考答案 (下)

除了 echarts 还了解其它画图工具吗? 除了 Echarts,还有不少优秀的画图工具可供选择使用。 Highcharts:它是一款功能强大且应用广泛的图表绘制工具,支持多种常见的图表类型,像柱状图、折线图、饼图、散点图等,同时也能创建较为复杂的图表,比如仪表盘图表、极坐标图等。H…...

【理论】测试框架体系TDD、BDD、ATDD、DDT介绍

一、测试框架是什么 测试框架是一组用于创建和设计测试用例的指南或规则。框架由旨在帮助 QA 专业人员更有效地测试的实践和工具的组合组成。 这些指南可能包括编码标准、测试数据处理方法、对象存储库、存储测试结果的过程或有关如何访问外部资源的信息。 A testing framewo…...

如何进行全脑思维(左脑,右脑,全脑)

1&#xff09;每人都有一个价值100万美元的点子 . 谁能帮助实施这个点子? . 实施这个点子需要哪些资源? . 推行这个点子需要得到哪些许可? . 是否有实施这个点子的最佳时间? . 作为实施的开始,最简单的做法是什么? 2) 进行理性的、逻辑的、量的思维那一半,而排除了大脑的…...

领域驱动设计 2

1.幂等设计 1.1.定义 无论进行多少次相同的操作&#xff0c;结果都保持一致的设计。 1.2.写操作的幂等性 1.2.1.Insert 指定唯一标识写&#xff0c;是具有幂等性的。 不指定唯一标识写&#xff0c;不具备幂等性。 1.2.2.Update 如果更新操作依赖于与历史状态&#xff0c…...

十年后LabVIEW编程知识是否会过时?

在考虑LabVIEW编程知识在未来十年内的有效性时&#xff0c;我们可以从几个角度进行分析&#xff1a; ​ 1. 技术发展与软件更新 随着技术的快速发展&#xff0c;许多编程工具和平台不断更新和改进&#xff0c;LabVIEW也不例外。十年后&#xff0c;可能会有新的编程语言或平台…...

ARM交叉编译Boost库

Boost下载&#xff1a;点击跳转 编译过程&#xff1a; 生成project-config.jam ./bootstrap.sh --with-librariesfilesystem,thread --with-toolsetgcc 2. 修改project-config.jam&#xff08;位于第12行附近&#xff09; if ! gcc in [ feature.values <toolset> ] …...

uniapp:钉钉小程序需要录音权限及调用录音

{// ... 其他配置项"mp-dingtalk": {"permission": {"scope.userLocation" : {"desc" : "系统希望获得您的定位用于确认您周围的设施数据"},"scope.bluetooth" : {"desc" : "你的蓝牙权限将用于小…...

Swin Transformer模型详解(附pytorch实现)

写在前面 Swin Transformer&#xff08;Shifted Window Transformer&#xff09;是一种新颖的视觉Transformer模型&#xff0c;在2021年由微软亚洲研究院提出。这一模型提出了一种基于局部窗口的自注意力机制&#xff0c;显著改善了Vision Transformer&#xff08;ViT&#xf…...

gitee 使用教程

前言 Gitee 是一个中国的开源代码托管平台&#xff0c;类似于 GitHub&#xff0c;旨在为开发者提供一个高效、稳定、安全的代码管理和协作开发环境。Gitee 支持 Git 协议&#xff0c;可以托管 Git 仓库&#xff0c;进行版本控制、代码协作、项目管理等操作。 1. Gitee 的主要…...

基于YOLOv8的水下目标检测系统

基于YOLOv8的水下目标检测系统 (价格90) 使用的是DUO水下目标检测数据集 训练集 6671张 验证集 1111张 测试集 1111张 包含 [holothurian, echinus, scallop, starfish] [海参, 海胆, 扇贝, 海星] 4个类 通过PYQT构建UI界面&#xff0c;包含图片检测&#xff0c;视…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

HTML前端开发:JavaScript 获取元素方法详解

作为前端开发者&#xff0c;高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法&#xff0c;分为两大系列&#xff1a; 一、getElementBy... 系列 传统方法&#xff0c;直接通过 DOM 接口访问&#xff0c;返回动态集合&#xff08;元素变化会实时更新&#xff09;。…...