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

news2024/11/18 17:53:23

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/826517.html

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

相关文章

支持中文创成式填充 AI版PS 2023 v25.0安装教程

抖音保姆级视频教程: https://v.douyin.com/iJdUjg2o/ PS 2023 v25.0安装包地址&#xff1a; 链接: https://pan.baidu.com/s/1PXgVHDHdMIRcDzV4IfGAQw?pwd2023 提取码: 2023 如有疑问请加交流请加QQ群&#xff1a;814894746 安装教程总结&#xff1a; 卸载之前的PS beta版…

C++11 通用工具

通用工具 目录 pair和tuple智能指针数值极值type trait 和type utility辅助函数clock和timerbitset随机数 1 pair和Tuple 1.1 pair 头文件 #include<utility>pair定义 pair<string,string> author{James","joyce"};)] --> pair操作 1.2 tup…

阿里云 MSE + ZadigX ,无门槛实现云原生全链路灰度发布

作者&#xff1a;ZadigX 企业发布现状痛点 目前企业在选择和实施发布策略时面临以下困境&#xff1a; 1. 缺乏云原生能力&#xff1a; 由于从传统部署转变为云原生模式后&#xff0c;技术架构改造需要具备相关能力的人才。这使得企业在发布策略方面难以入手。 2. 缺乏自动化…

一张图看懂应用程序访问驱动的内部原理

咱就浅谈一下字符设备驱动的内部实现~ 1、当我们在应用程序中使用open打开文件的时候&#xff0c;会自动在/dev/mycdev下生成一个inode号。 2、只要文件存在于系统中&#xff0c;在系统内核就会存在一个inode结构体&#xff0c;里面存储文件的一些相关信息&#xff0c;其中信息…

如何使用STAR原则优化项目管理?

介绍STAR原则 1.1 STAR原则的定义 STAR原则是一个行为面试技术&#xff0c;即Situation&#xff08;情境&#xff09;、Task&#xff08;任务&#xff09;、Action&#xff08;行动&#xff09;和Result&#xff08;结果&#xff09;。这种原则被广泛应用在职业面试中&#x…

【严重】Metabase 基于H2引擎的远程代码执行漏洞

漏洞描述 Metabase 是一个开源的数据分析和可视化工具。 由于 CVE-2023-38646 的补丁(从H2 JDBC连接字符串中删除INIT脚本以防止命令注入)修复不完全&#xff0c;Metabase 仍受到命令注入的影响。攻击者可使用 H2 作为数据库引擎&#xff0c;通过 /api/setup/validate 端点发…

idea设置项目使用本地仓库

方法一&#xff1a;最简单有效的方法 在pom加入以下内容 <repositories><repository><id>local-repo</id><url>file://本地仓库目录</url></repository></repositories>方法二&#xff1a;idea设置maven为workoffline&#x…

局域网内电脑ping不通(防火墙惹的祸)

明明是同一网段&#xff08;同一局域网&#xff09;的电脑&#xff0c;却ping不通&#xff0c;这种情况大概率就是防火墙惹得祸了。除了把防火墙关掉&#xff0c;我们还可以采取如下解决方案。 解决方案&#xff1a; 1. 打开&#xff1a;控制面板\系统和安全\Windows Defende…

真香!云原生安全,大客户终于愿意买单了

5年前&#xff0c;我的哥们老丁 从倒腾防火墙转行卖新产品 据说那是一片蓝海&#xff0c;美其名曰 「云原生安全」 可是&#xff0c;“吆喝”了一段时间 老丁发现&#xff0c;这个蓝海没想象那么蓝 很多老客户都不买账 相反还是那些传统安全产品销量更好 为啥客户不感冒呢…

程序员生涯写过最大的Bug!这威力多少有点大了...

程序员一生与bug奋战&#xff0c;可谓是杀敌无数&#xff0c;见怪不怪了&#xff01;如果要问码农们&#xff0c;在自己职业生涯中写过最大的Bug是什么&#xff0c;想必每一位都需要一个话筒来说上几分钟...... 一个BUG&#xff0c;连升两级 一个bug能给程序员带来什么?优秀员…

Vue2(初识vue)

目录 一&#xff0c;Vue2简介1.1&#xff0c;什么是vue1.2&#xff0c;初始vue1.3&#xff0c;搭建vue环境1.4&#xff0c;第一个hello world 二&#xff0c;基础知识2.1 指令2.2-1 指令v-text2.2-2 指令v-html2.2-3 指令v-if2.2-4 指令v-else2.2-5 指令v-show2.2-6 v-if指令与…

IDEA导入第三方jar包, 并在Maven中打包该jar包

IDEA导入jar包, 并在Maven中打包该jar包 背景步骤IDEA导入jar包Maven中打包第三方jar包 背景 项目因为某些原因, 需要引入demo中代码, 但是demo使用的是 java而且没有使用任何框架, 并且还引用第三方 jar, 因此在自己项目(SpringBootMaven)中集成demo时. 整个集成过程中颇为麻…

2023拒绝内卷!两年转行网络安全真实看法!

我目前转行网络安全两年&#xff0c;没啥天分&#xff0c;全靠努力&#xff0c;基本能够得上中级的水平了。看到大家对转行网络安全挺感兴趣&#xff0c;也有挺多争议&#xff0c;想把我的建议和经验告诉大家。 有很多人觉得网络安全已经饱和了&#xff0c;现在选择这个工作&a…

docker-compose 搭建 Sharding-Proxy 5.4.0 分库分表代理服务

感谢: 程序员一枚 提供搭建方式 项目地址: https://gitee.com/dromara/RuoYi-Cloud-Plus/tree/2.X/ 1.在 mysql 创建两个库 创建两个库 data-center_0 data-center_1 分别执行如何sql CREATE TABLE t_order_0 (order_id bigint(20) UNSIGNED NOT NULL COMMENT 主键ID,user_…

【数据结构】27.移除元素

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

P4145 上帝造题的七分钟 2 / 花神游历各国

上帝造题的七分钟 2 / 花神游历各国 题目背景 XLk 觉得《上帝造题的七分钟》不太过瘾&#xff0c;于是有了第二部。 题目描述 "第一分钟&#xff0c;X 说&#xff0c;要有数列&#xff0c;于是便给定了一个正整数数列。 第二分钟&#xff0c;L 说&#xff0c;要能修改…

Ubuntu22.04搭建mysql主从复制

记录哈&#xff0c;这个需要两台服务器&#xff0c;每台服务器上面都要安装mysql&#xff0c;若是没有安装&#xff0c;请分别在两台服务器上面运行下面的命令 sudo apt install mysql-server 引用 Ubuntu下的mysql8.0忘记密码怎么办? 环境 Ubuntu 22.04 主机:192.168.164.1…

mac前端代码编辑 Sublime Text 4 Dev 中文v4.0(4151)

Sublime Text 4 for Mac是一款功能强大的代码编辑器&#xff0c;适合所有需要高效编写代码和进行代码管理的程序员使用。 快速响应&#xff1a;Sublime Text 4在加载文件和执行命令时非常快速&#xff0c;能够让用户在高效的开发过程中体验到无缝的交互。 多种语言支持&#…

定了!全国2023下半年软考(高级、中级、初级)报名时间汇总

截止到2023年8月2日&#xff0c;有以下地区公布了软考报名时间&#xff1a; 安徽软考2023下半年报名时间&#xff1a;8月15日9:00至8月21日16:00 黑龙江软考2023下半年报名时间&#xff1a;8月16日至8月22日 甘肃软考2023下半年报名时间&#xff1a;8月28日9:00至9月6日18:00…

安全文件传输的重要性及其对企业的影响

在当今的信息时代&#xff0c;企业之间的文件传输已经成为日常工作的重要组成部分。无论是在商务合作、人力资源还是财务审计等方面&#xff0c;文件传输都发挥着关键的作用。然而&#xff0c;随着网络技术的发展&#xff0c;网络安全问题也日益突出&#xff0c;泄漏、篡改、丢…