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

news2024/11/26 4:50:29

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.coloradmin.cn/o/844819.html

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

相关文章

架构训练营学习笔记:6-2 微服务基础选型

基础选型 微服务基础设施架构 优先级 其中&#xff0c;核心 就是服务注册、服务发现、服务路由。 模式1-嵌入SDK 模式2-反向代理式 模式3-网络代理式&#xff08;Service Mesh&#xff09; 模式对比 常见微服务框架选择 嵌入SDK-dubbo Spring Cloud 反向代理式 APISIX …

【Docker】性能测试监控平台搭建:InfluxDB+Grafana+Jmeter+cAdvisor

前言 在做性能测试时&#xff0c;如果有一个性能测试结果实时展示的页面&#xff0c;可以极大的提高我们对系统性能表现的掌握程度&#xff0c;进而提高我们的测试效率。但是我们每次打开Jmeter都会有几个硕大的字提示别用GUI模式进行负载测试&#xff0c;而且它自带的监视器效…

LeetCode-Java(06)

24. 两两交换链表中的节点 非递归解法 class Solution {public ListNode swapPairs(ListNode head) {ListNode pre new ListNode(0);pre.next head;ListNode temp pre;while(temp.next ! null && temp.next.next ! null) {ListNode start temp.next;ListNode end …

指标体系构建与验证

文章目录 知网论文1 本土化计算思维评价指标体系的构建与探索——基于1410名高中生的样本分析与验证2 企业集团人力资源管理质量评价指标体系的构建3 基于知识管理的创新型企业评价指标体系的构建及验证4 中国公民科学素质测评指标体系研究5 中国企业劳动关系评价指标体系的改进…

Linux ❀ Yum源安装RPM包常见问题与解决方法

文章目录 1、Yum源仓库检查2、执行安装报错2.1 RPM包缺失2.2 进程锁定2.3 未完成事务2.4 RPM包冲突 1、Yum源仓库检查 404错误多为yum源无法访问导致&#xff0c;检查yum仓库是否配置正确&#xff0c;同时确认baseurl连通性。 $ cd /etc/yum.repos.d/ $ cat ${yum_file} | gr…

ETHERCAT转PROFIBUS连接到300plc的配置方法

由于捷米JM-DP-ECT&#xff0c;是自主研发的一款PROFIBUS从站功能的通讯网关&#xff0c;它的主要功能是将ETHERCAT设备接入到PROFIBUS网络中生产环境比较复杂有多个设备采用不同的协议这极大的阻碍了&#xff0c;各个设备的数据互通。 JM-DP-ECT这个小小的网关可不简单&#x…

thunder gbm

文章目录 背景参考官网信息训练调参模型保存推理 背景 想在 GPU 上使用使用闪电般快速的提升方法&#xff1f;了解这个库就好了。在很多任务上&#xff0c;它都比 LightGBM 和 XGBoost 快。 ThunderGBM 的主要特征如下&#xff1a; 通常是其它库的 10 倍。 支持 Python&#x…

记一次数据批量插入实践

背景&#xff1a; 2023月7月份入职新公司&#xff0c;初来乍到还没参入到具体的项目中&#xff0c;技术负责人安排写一个批量处理数据的服务&#xff0c;于是便有了以下文章。 数据流程大概是这样&#xff0c;从clickhouse表中获取数据&#xff0c;并从elasticserach中根据业务…

【VALSE2023】0610 邓成/杨二昆《多模态融合感知年度进展综述》

from&#xff1a; https://www.bilibili.com/video/BV1YP411t73r 文章目录 多模态融合感知理论多模态预训练模型多模态感知理解多模态内容生成 总结和展望 多模态融合感知理论 多模态预训练模型 多模态感知理解 多模态内容生成 总结和展望

flink如何监听kafka主题配置变更

背景&#xff1a; 从前一篇文章我们知道flink消费kafka主题时是采用的手动assign指定分区的方式&#xff0c;这种消费方式是不处理主题的rebalance操作的&#xff0c;也就是消费者组中即使有消费者退出或者进入也是不会触发消费者所消费的分区的&#xff0c;那么疑问就来了&am…

用户的管理

一、用户的管理 useradd、usermod、userdel 二、用户组的管理 groupadd、groupmode、groupdel 三、用户登录情况查看 w可以看用户操作 其他可以看用户ip 四、用户的提权&#xff08;重点&#xff09; 三种方法&#xff1a;1、su - 用户名&#xff08;需要该用户名的密码&a…

Pandas 的Merge函数详解

在日常工作中&#xff0c;我们可能会从多个数据集中获取数据&#xff0c;并且希望合并两个或多个不同的数据集。这时就可以使用Pandas包中的Merge函数。在本文中&#xff0c;我们将介绍用于合并数据的三个函数 merge、 merge_ordered、 merge_asofmerge merge函数是Pandas中…

Kotlin~Mediator中介者模式

概念 创建一个中介来降低对象之间的耦合度&#xff0c;关系”多对多“变为“一对多”。 角色介绍 Mediator&#xff1a;抽象中介者&#xff0c;接口或者抽象类。ConcreteMediator&#xff1a;中介者具体实现&#xff0c;实现中介者接口&#xff0c;定义一个List管理Colleagu…

【频率派和贝叶斯派】进阶学习-贝叶斯方法原理、基本结构、代码构建+图模型

文章目录 前言1.理论支撑贝叶斯思考模式贝叶斯定理贝叶斯公式 2. 应用转化2.1 拼写检查 3. 贝叶斯网络3.1 贝叶斯网络的定义3.2 三个形式和实际案例的构建关系 前言 频率派与贝叶斯派各自不同的思考方式&#xff1a; 1.频率派把需要推断的参数θ看做是固定的未知数&#xff0c…

草图大师su曲面怎么推拉?SketchUp推拉怎么使用?

首先我们需要安装这个推拉插件&#xff0c;然后打开草图大师&#xff0c;打开超级推拉工具栏&#xff0c;可以看到&#xff0c;超级推拉主要有以下几种推拉方式&#xff1a;J联合推拉、R近似值推拉、V矢量推拉、N法线推拉、X挤出推拉、F跟随推拉。 首先选择你要进行推拉操作的物…

【iPhone】手机还有容量,拍视频却提示 iPhone 储存空间已满

文章目录 前言解决方案 结语 前言 今天在用 iPhone 录像的时候突然提醒我 iPhone储存空间已满 你没有足够的储存空间来录制视频” 可我明明还有 20G 的容量 我非常疑惑&#xff0c;因为我之前还剩1个G都能录像&#xff0c;现在20G反而不行了&#xff0c;于是重启了手机&#…

数据结构【哈夫曼树】

哈夫曼树 哈夫曼树的概念哈夫曼树的构造构造算法的实现哈夫曼树应用哈夫曼编码哈夫曼编码的算法实现 哈夫曼树的概念 最优二叉树也称哈夫曼 (Huffman) 树&#xff0c;是指对于一组带有确定权值的叶子结点&#xff0c;构造的具有最小带权路径长度的二叉树。权值是指一个与特定结…

c++ 拷贝构造

我们思考一下这个问题&#xff1a; 观察以下代码&#xff0c;在运行的时候会崩溃 想一想为什么 #include<iostream> using namespace std;//栈类 typedef int DataType; class Stack { public://默认构造&#xff1a;Stack(size_t capacity 3){_array (DataType*)ma…

在广告宣传领域,PS透明屏有哪些优点表现?

PS透明屏是一种新型的显示技术&#xff0c;它将传统的显示屏幕与透明材料相结合&#xff0c;使得屏幕能够同时显示图像和透过屏幕看到背后的物体。 这种技术在商业展示、广告宣传、产品展示等领域有着广泛的应用前景。 PS透明屏的工作原理是利用透明材料的特性&#xff0c;通…

iTOP-i.MX8MM开发板添加 isb 转串口设备驱动

对于通过 USB 接口访问的模块&#xff0c;在 Linux 内核中集成 USB 驱动程序。我们需要配置内核选中支持 GSM 和 CDMA 模块的 USB 转串口驱动 > Device Drivers -> USB support (USB_SUPPORT [y]) -> USB Serial Converter support (USB_SERIAL [y]) -> USB dr…