【嵌入式学习笔记】嵌入式入门3——串口

1.数据通信的基础概念

1.1.串行/并行通信

数据通信按数据通信方式分类:串行通信、并行通信
在这里插入图片描述

1.2.单工/半双工/全双工通信

数据通信按数据传输方向分类:单工通信、半双工通信、全双工通信

  • 单工通信:数据只能沿一个方向传输
  • 半双工通信:数据可以沿两个方向传输,但需要分时进行
  • 全双工通信:数据可以同时进行双向传输
    在这里插入图片描述

1.3.同步/异步通信

数据通信按数据同步方式分类:同步通信、异步通信

  • 同步通信:共用同一时钟信号
  • 异步通信:没有时钟信号,通过在数据信号中加入起始位和停止位等一些同步信号
    在这里插入图片描述

1.4.比特率与波特率

  • 比特率:每秒钟传送的比特数,单位bit/s
  • 波特率:每秒钟传送的码元数,单位Baud
  • 比特率 = 波特率 * log2 M ,M表示每个码元承载的信息量
  • 二进制系统中,波特率数值上等于比特率

1.5.常见的串行通信接口

在这里插入图片描述

2.串口(RS-232)

2.1.什么是串口

串口:即串行通信接口,指按位发送和接收的接口,如:RS-232/422/485等。

RS-232接口(DB9)
在这里插入图片描述

2.2.RS-232电平与COMS/TTL电平对比

电平标准逻辑1逻辑0
RS-232电平-15V ~ -3V+3V ~ +15V
COMS电平3.3V0V
TTL电平5V0V

2.3.设备间的RS-232通信示意图

在这里插入图片描述

2.4.STM32串口与电脑USB口通信示意图

在这里插入图片描述

2.5.RS-232异步通信协议

在这里插入图片描述

  • 启动位:必须占1个位长,保持逻辑0电平
  • 有效数据位:可选5、6、7、8、9个位长,LSB在前,MSB在后
  • 校验位:可选占1个位长,也可以没有该位
  • 停止位:必须有,可选占0.5、1、1.5、2个位长,保持逻辑1电平

一般情况下,启动位为1,数据位为8,校验位为0,停止位为1。

3.STM32的USART

3.1.STM32的USART简介

  • USART:通用同步异步收发器,Universal synchronous asynchronous receiver transmitter
  • UART: 通用异步收发器,Universal asynchronous receiver transmitter,
  • USART/UART都可以与外部设备进行全双工异步通信
  • 对于USART,既可以作为USART使用,也可以作为UART使用,我们常用USAT的功能

3.2. STM32的USART主要特征

  • 全双工异步通信
  • 单线半双工通信
  • 单独的发送器和接收器使能位
  • 可配置使用DMA的多缓冲器通信
  • 多个带标志的中断源

3.3. STM32的USART框图

  • STM32的USRAT简化框图
    在这里插入图片描述

着重关注:
①发送/接收数据的流程
②相关寄存器作用
③设置波特率

  • F1/F4/F7框图
    在这里插入图片描述
  • H7框图
    在这里插入图片描述

3.4.设置USART波特率(以F1为例)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述把USARTDIV的值写入USART_BRR寄存器

uint16_t mantissa; 
uint16_t fraction; 
mantissa=39; 
fraction=0.0625*16+0.5=0x01;          /* USARTDIV = DIV_Mantissa + (DIV_Fraction/16) 四舍五入*/
USART1->BRR = (mantissa << 4) + fraction;

波特率设置通用公式推演(F1)

在这里插入图片描述
设置USART/UART波特率(F4)
在这里插入图片描述
在这里插入图片描述
设置USART/UART波特率(F7)
在这里插入图片描述
在这里插入图片描述
设置USART/UART波特率(H7)
在这里插入图片描述

3.5.USART寄存器介绍(F1)

  • BRR寄存器在上一节已经讲过,不再赘述
  • 控制寄存器1(CR1)
    该寄存器需要完成的配置:
    位13:使能USART
    位12:配置8个数据位
    位10:禁止检验控制
    位5:使能接收缓冲区非空中断
    位3:使能发送
    位2:使能接收
    在这里插入图片描述
  • 控制寄存器2(CR2)
    该寄存器需要完成的配置:配置1个停止位
    在这里插入图片描述
  • 控制寄存器3(CR3)
    该寄存器需要完成的配置:配置不选择半双工模式
    在这里插入图片描述
  • 数据寄存器(DR)
    设置好控制和波特率寄存器后,往该寄存器写入数据即可发送,接收数据则读该寄存器
    在这里插入图片描述
  • 状态寄存器(SR)
    根据TC位可以知道能否发数据,根据RXNE位知道是否收到数据
    在这里插入图片描述

4.HAL库外设初始化MSP回调机制

  • 当多个PPP外设同时使用MSP函数,则可以通过判断外设寄存器基地址区分是哪个外设,再配置PPP外设用到的硬件
  • 当多个PPP外设共用该函数,文件不好管理,而且放到一起看着比较乱,这时候就不建议使用该函数
    在这里插入图片描述
    在这里插入图片描述

5.HAL库中断回调机制

  • 当多个PPP外设同时使用中断回调函数,则可以通过判断外设寄存器基地址区分是哪个外设进入中断,并执行相应的处理
  • 当多个PPP外设共用该函数文件不好管理,这时候就不建议使用该函数
    在这里插入图片描述
    在这里插入图片描述

6.USART/UART异步通信配置步骤

在这里插入图片描述

  • HAL_UART_Init(UART_HandleTypeDef *huart)关键结构体(F1).
typedef struct 
{    uint32_t BaudRate; 		/* 波特率 */ uint32_t WordLength; 		/* 字长 */uint32_t StopBits; 		/* 停止位 */ uint32_t Parity; 			/* 奇偶校验位 */ uint32_t Mode; 			/* UART 模式 */ uint32_t HwFlowCtl; 		/* 硬件流设置 */ uint32_t OverSampling; 	/* 过采样设置 */ 
}UART_InitTypeDef
  • HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size).
    作用:以中断的方式接收指定字节的数据
    形参 1 是 UART_HandleTypeDef 结构体类型指针变量
    形参 2 是指向接收数据缓冲区
    形参 3 是要接收的数据大小,以字节为单位

  • HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout).
    作用:以阻塞的方式发送指定字节的数据
    形参 1 :UART_HandleTypeDef 结构体类型指针变量
    形参 2:指向要发送的数据地址
    形参 3:要发送的数据大小,以字节为单位
    形参 4:设置的超时时间,以ms单位

7.IO引脚复用功能

7.1.STM32F1的IO引脚复用

  • 通用:IO端口的输入或输出是由GPIO外设控制,我们称之为通用
  • 复用:IO端口的输入或输出是由其它非GPIO外设控制,我们称之为复用
  • 各IO支持什么复用功能:可查数据手册引脚定义
  • IO复用功能冲突问题:同一时间IO只能用作一种复用功能,否则会发生冲突
  • 遇到IO复用功能冲突:可考虑重映射功能

AFIO寄存器的作用就是复用功能IO和调试配置的,STM32F103共有6个AFIO的寄存器:事件控制寄存器AFIO_EVCR、复用重映射和调试IO配置寄存器AFIO_MAPR、外部中断配置寄存器AFIO_EXTICR1-4。可以参考文章http://t.csdn.cn/hJJeL

7.3.STM32F4/F7/H7的IO引脚复用

为了解决F1系列存在的IO复用功能冲突问题,F4往后的系列都加入了复用器,有如下特点:

  • 每个 IO 引脚都有一个复用器
  • 复用器采用 16 路复用功能输入(AF0 到 AF15)
  • 复用器一次仅允许一个外设的复用功能 (AF) 连接到 IO 引脚
  • 通过GPIOx_AFRL和GPIOx_AFRH寄存器进行配置

复位完成后,所有 IO 都会连接到系统的复用功能 0 (AF0)。注意,中断的复用使用的是SYSCFG_EXTICR寄存器
在这里插入图片描述
在这里插入图片描述

8.编程实战:通过串口接收或者发送一个字符

源码暂不贴出

9.解读例程源码:串口实验(接收不定长字符,并发送出去)

在这里插入图片描述
在这里插入图片描述

【注意】printf也可以实现串口发送,速度其实并不快(115200波特率下1ms大约11字节),调试时可以用,做开发尽量不用

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

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

相关文章

防雷工程行业应用和施工工艺

防雷工程是指通过各种手段和措施&#xff0c;保护建筑物、设备和人员免受雷电侵害的技术。在我国&#xff0c;由于雷电活动频繁&#xff0c;防雷工程的重要性不言而喻。地凯科技将介绍防雷工程的基本知识、相关案例以及防雷器产品。 一、防雷工程的基本知识 雷电的危害 雷电…

真机搭建中小网络

这是b站上的一个视频&#xff0c;演示了如何搭建一个典型的中小网络&#xff0c;供企业使用 一、上行端口&#xff1a;上行端口就是连接汇聚或者核心层的口&#xff0c;或者是出广域网互联网的口。也可理解成上传数据的端口。 二、下行端口&#xff1a;连接数据线进行下载的端…

pytorch学习——如何构建一个神经网络——以手写数字识别为例

目录 一.概念介绍 1.1神经网络核心组件 1.2神经网络结构示意图 1.3使用pytorch构建神经网络的主要工具 二、实现手写数字识别 2.1环境 2.2主要步骤 2.3神经网络结构 2.4准备数据 2.4.1导入模块 2.4.2定义一些超参数 2.4.3下载数据并对数据进行预处理 2.4.4可视化数…

RocketMQ生产者和消费者都开启Message Trace后,Consume Message Trace没有消费轨迹

一、依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.0.3</version> </dependency>二、场景 1、生产者和消费者所属同一个程序 2、生产者开启消…

【css】css实现水平和垂直居中

通过 justify-content 和 align-items设置水平和垂直居中&#xff0c; justify-content 设置水平方向&#xff0c;align-items设置垂直方向。 代码&#xff1a; <style> .center {display: flex;justify-content: center;align-items: center;height: 200px;border: 3px…

【前端入门之旅】HTML中元素和标签有什么区别?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 标签&#xff08;Tag&#xff09;⭐元素&#xff08;Element&#xff09;⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&a…

千“垂”百炼:垂直领域与语言模型

这一系列文章仍然坚持走“通俗理解”的风格&#xff0c;用尽量简短、简单、通俗的话来描述清楚每一件事情。本系列主要关注语言模型在垂直领域尝试的相关工作。 This series of articles still sticks to the "general understanding" style, describing everything…

网络安全--原型链污染

目录 1.什么是原型链污染 2.原型链三属性 1&#xff09;prototype 2)constructor 3)__proto__ 4&#xff09;原型链三属性之间关系 3.JavaScript原型链继承 1&#xff09;分析 2&#xff09;总结 3)运行结果 4.原型链污染简单实验 1&#xff09;实验一 2&#xff0…

微信小程序animation动画,微信小程序animation动画无限循环播放

需求是酱紫的&#xff1a; 页面顶部的喇叭通知&#xff0c;内容不固定&#xff0c;宽度不固定&#xff0c;就是做走马灯&#xff08;轮播&#xff09;效果&#xff0c;从左到右的走马灯&#xff08;轮播&#xff09;&#xff0c;每播放一遍暂停 1500ms &#xff5e; 2000ms 刚…

【ASP.NET MVC】MYSQL安装配置(4)

一、安装配置 1、下载MYSQL绿色版压缩包&#xff08;略&#xff09; 2、解压到目录&#xff0c;比如E:\mysql目录 3、设置环境变量 添加bin目录到path&#xff0c;方便运行Mysql的命令 先打开系统的《环境变量》配置 双击系统变量中的Path 添加Mysql的BIN目录到path: 4、在…

解决一个Yarn异常:Alerts for Timeline service 2.0 Reader

【背景】 环境是用Ambari搭建的大数据环境&#xff0c;版本是2.7.3&#xff0c;Hdp是3.1.0&#xff1b;我们用这一套组件搭建了好几个环境&#xff0c;都有这个异常告警&#xff0c;但hive、spark都运行正常&#xff0c;可以正常使用&#xff0c;所以也一直没有去费时间解决这…

jar命令的安装与使用

场景&#xff1a; 项目中经常遇到使用WinR软件替换jar包中的文件&#xff0c;有时候存在WinRAR解压替换时提示没有权限&#xff0c;此时winRAR不能用还有有什么方法替换jar包中的文件。 方法&#xff1a; 使用jar命令进行修改替换 问题&#xff1a; 执行jar命令报错jar 不…

ubuntu git操作记录设置ssh key

用到的命令&#xff1a; 安装git sudo apt-get install git配置git用户和邮箱 git config --global user.name “用户名” git config --global user.email “邮箱地址”安装ssh sudo apt-get install ssh然后查看安装状态&#xff1a; ps -e | grep sshd4. 查看有无ssh k…

一次web网页设计实践——checkbox单选、复选功能的实现

由于工作内容原因近期做了一个网页&#xff0c;记录下。 需求&#xff1a; 写一个如下的页面&#xff0c;包括checkbox单选&#xff0c;checkbox多选&#xff0c;slect&#xff0c;text等控件 内容&#xff1a; 一、checkbox &#xff08;Wlan 开关&#xff09; 要求&#x…

只需十四步,从零开始掌握Python机器学习

推荐阅读&#xff08;点击标题查看&#xff09; 1、Python 数据挖掘与机器学习实践技术应用 2、R-Meta分析与【文献计量分析、贝叶斯、机器学习等】多技术融合实践与拓展 3、最新基于MATLAB 2023a的机器学习、深度学习 4、【八天】“全面助力AI科研、教学与实践技能”夏令营…

python项目开发案例集锦,python项目案例代码

这篇文章主要介绍了python项目开发案例集锦(全彩版)&#xff0c;具有一定借鉴价值&#xff0c;需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获&#xff0c;下面让小编带着大家一起了解一下。 前言 22个通过Python构建的项目&#xff0c;以此来学习Python编程。 ① 骰…

变透明的黑匣子:UCLA 开发可解释神经网络 SNN 预测山体滑坡

内容一览&#xff1a;由于涉及到多种时空变化因素&#xff0c;山体滑坡预测一直以来都非常困难。深度神经网络 (DNN) 可以提高预测准确性&#xff0c;但其本身并不具备可解释性。本文中&#xff0c;UCLA 研究人员引入了 SNN。SNN 具有完全可解释性、高准确性、高泛化能力和低模…

一元三次方程求解

一元三次方程求解 题目描述提示输入输出格式输入格式输出格式 输入输出样例输入样例输出样例 算法分析A C 代码 题目描述 有形如&#xff1a; a x 3 b x 2 c x d 0 ax^3bx^2c^xd0 ax3bx2cxd0一元三次方程。给出该方程中各项的系数 ( a a a&#xff0c; b b b&#xff0c;…

无限遍历,Python实现在多维嵌套字典、列表、元组的JSON中获取数据

目录 背景 思路 新建两个函数A和B&#xff0c;函数 A处理字典数据&#xff0c;被调用后&#xff0c;判断传递的参数&#xff0c;如果参数为字典&#xff0c;则调用自身&#xff1b; 如果是列表或者元组&#xff0c;则调用列表处理函数B&#xff1b; 函数 B处理列表&#x…

TabR:检索增强能否让深度学习在表格数据上超过梯度增强模型?

这是一篇7月新发布的论文&#xff0c;他提出了使用自然语言处理的检索增强Retrieval Augmented技术&#xff0c;目的是让深度学习在表格数据上超过梯度增强模型。 检索增强一直是NLP中研究的一个方向&#xff0c;但是引入了检索增强的表格深度学习模型在当前实现与非基于检索的…