江科大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;}}}

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

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

相关文章

KG-CoT:基于知识图谱的大语言模型问答的思维链提示

一些符号定义 知识图谱实体数量&#xff1a; n n n 知识图谱中关系类型数量&#xff1a; m m m 三元组矩阵&#xff1a; M ∈ { 0 , 1 } n n m \textbf{M} \in \{0, 1\}^{n \times n \times m} M∈{0,1}nnm&#xff0c; M i j k 1 M_{ij}^k 1 Mijk​1则说明实体 i i i和实…

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

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

AIGC 新浪潮|Story CN meetups 将于 1 月 10-14 日举办!

随着 Web3 行业发展进入全新阶段&#xff0c;与生成式人工智能&#xff08;AIGC&#xff09;技术融合正在创造潜力新星项目。也是目前的互联网生态下&#xff0c;任何普通民众都有权利创作高质量的音乐、艺术、散文和视频内容&#xff0c;带来了用户生成内容&#xff08;UGC&am…

Python基于YOLOv8和OpenCV实现车道线和车辆检测

使用YOLOv8&#xff08;You Only Look Once&#xff09;和OpenCV实现车道线和车辆检测&#xff0c;目标是创建一个可以检测道路上的车道并识别车辆的系统&#xff0c;并估计它们与摄像头的距离。该项目结合了计算机视觉技术和深度学习物体检测。 1、系统主要功能 车道检测&am…

黑马跟学.苍穹外卖.Day04

黑马跟学.苍穹外卖.Day04 苍穹外卖-day04课程内容1. Redis入门1.1 Redis简介1.2 Redis下载与安装1.2.1 Redis下载1.2.2 Redis安装 1.3 Redis服务启动与停止1.3.1 服务启动命令1.3.2 客户端连接命令1.3.3 修改Redis配置文件1.3.4 Redis客户端图形工具 2. Redis数据类型2.1 五种常…

SOLID原则学习,开闭原则

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

filebeat、kafka

elk的架构 es数据库&#xff1a;非关系型数据库&#xff0c;json格式 logstash&#xff1a;收集日志 kibana&#xff1a;图形化的工具 ↓ 以上三种结合起来即为日志收集系统 filebeat 作用&#xff1a;filebeat是一款轻量级的日志收集工具&#xff0c;不依赖java环境&…

Qt重写webrtc的demo peerconnection

整个demo为&#xff1a; 可以选择多个编码方式&#xff1a; cmake_minimum_required(VERSION 3.5)project(untitled LANGUAGES CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_INCLUDE_CURRENT_DIR ON)set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON)set(CMA…

【Notepad++】Notepad++如何删除包含某个字符串所在的行

Notepad如何删除包含某个字符串所在的行 一&#xff0c;简介二&#xff0c;操作方法三&#xff0c;总结 一&#xff0c;简介 在使用beyoundcompare软件进行对比的时候&#xff0c;常常会出现一些无关紧要的地方&#xff0c;且所在行的内容是变化的&#xff0c;不方便进行比较&…

python无需验证码免登录12306抢票 --selenium(2)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 [TOC](python无需验证码免登录12306抢票 --selenium(2)) 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 就在刚刚我抢的票&#xff1a;2025年1月8日…

CSS 盒模型

盒模型 CSS盒模型是网页布局的核心概念之一&#xff0c;它描述了网页元素的物理结构和元素内容与周围元素之间的关系。根据W3C规范&#xff0c;每个HTML元素都被视为一个矩形盒子&#xff0c;这个盒子由以下四个部分组成&#xff1a; 内容区&#xff08;Content area&#xff…

WPF的自定义控件控件学习

引入自定义控件 <controls:Intellibox Style"{StaticResource ListSearch-SearchIntellibox}" Width"95" Margin"0,3" MaxResults"200" …

【含开题报告+文档+PPT+源码】基于springboot的农贸菜市场租位管理系统的设计与实现

开题报告 随着信息技术的快速发展和普及&#xff0c;信息化管理已成为各行业提升运营效率和服质量的重要手段。农贸菜市场作为城市生活的重要组成部分&#xff0c;其管理效率和服务水平直接关系到市民的日常生活体验。传统的农贸菜市场租位管理方式往往存在信息不对称、管理效…

华为路由器、交换机、AC、新版本开局远程登录那些坑(Telnet、SSH/HTTP避坑指南)

关于华为设备远程登录配置开启的通用习惯1、HTTP/HTTPS相关服务 http secure-server enablehttp server enable 2、Telnet服务telnet server enable3、SSH服务stelnet server enablessh user admin authentication-type password 「模拟器、工具合集」复制整段内容 链接&…

【论文阅读-思维链的构造方法02】4.1.2 Automatic Construction-02

提示1&#xff1a;本篇博客中涉及4篇相关论文&#xff0c;预计阅读时间10分钟&#xff0c;望各位友友耐心阅读&#xff5e; 提示2&#xff1a;本篇所有涉及的论文已打包发布&#xff0c;不需要任何积分即可下载&#xff0c;指路 --> 论文集下载地址 大模型技术-思维链CoT …

【GIt原理与使用】Git远程仓库

一、理解分布式版本控制系统 我们目前所说的所有内容&#xff08;工作区&#xff0c;暂存区&#xff0c;版本库等等&#xff09;&#xff0c;都是在本地&#xff01;也就是在你的笔记本或者计算机上。而我们的 Git 其实是分布式版本控制系统&#xff01;什么意思呢&#xff1f…

力扣-数组-88 合并两个有序数组

解析 分别维护指向两个数组的指针&#xff0c;不断往后增加指针即可&#xff0c;主要是边界&#xff0c;然后时间复杂度是。 代码 class Solution { public:void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {vector <int> new…

家用万兆网络实践:紧凑型家用服务器静音化改造(二)

大家好&#xff0c;这篇文章我们继续分享家里网络设备的万兆升级和静音改造经验&#xff0c;希望对有类似需求的朋友有所帮助。 写在前面 在上一篇《家用网络升级实践&#xff1a;低成本实现局部万兆&#xff08;一&#xff09;》中&#xff0c;我们留下了一些待解决的问题。…

小程序组件 —— 29 组件案例 - 字体图标的使用

这一节主要是完善公司信息区域&#xff0c;我们需要在文本之前添加一些字体图标&#xff0c;这一节我们学习如何在微信小程序中使用字体图标&#xff1b; 在项目中&#xff0c;我们使用的小图标&#xff0c;一般由公司设计师进行设计&#xff0c;设计好之后上传到阿里巴巴矢量…

RK3562编译Android13 ROOT固件教程,触觉智能开发板演示

本文介绍编译Android13 ROOT权限固件的方法&#xff0c;触觉智能RK3562开发板演示&#xff0c;搭载4核A53处理器&#xff0c;主频高达2.0GHz&#xff1b;内置独立1Tops算力NPU&#xff0c;可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。 关闭seli…