【STM32】串口(异步通信部分)

news2024/9/22 19:29:09

经典的串口接口硬件说实话在现在的电脑上已经很难见到了,而是被USB这种通用的串行接口替代了,哪怕外部设备要以串口连接到电脑,都需要进行各种硬件转换。但不得不说,在工业领域,串口还是一个非常常用的数据传输方式。

大部分图片来源:正点原子HAL库课程

目录

1    通信的基本知识

1.1    同步/异步通信

1.2    比特率和波特率

2    串口电平与连接

2.1    RS232电平

2.2    CMOS电平(STM32)

2.3    TTL电平(51)

2.4    连接方式

3    U(S)ART

3.1    简介

3.2    查看芯片U(S)ART数量

3.3    查看U(S)ART对应引脚

3.4    波特率计算公式

3.5    使用寄存器设置波特率的示例

3.6    HAL库异步通信配置

3.7    详细的解析

3.8    相关的HAL库文件(可以去这里找用到的函数和宏定义)


1    通信的基本知识

1.1    同步/异步通信

  • 同步通信:共用同一时钟信号;

     
  • 异步通信:没有时钟信号,通过在数据信号中 加入起始位和停止位等同步信号。

1.2    比特率和波特率

比特率:每秒钟传送的比特数,单位bit/s

波特率:每秒钟传送的码元数,单位Baud

比特率 = 波特率 * log2 M,M表示每个码元承载的信息量(这里M可以直接理解为信息调制后的的进制数)

二进制系统中,波特率数值上等于比特率(我的理解是要是一次性可以发送的数据不是1位,那么波特率就不等于比特率了)。


2    串口电平与连接

2.1    RS232电平

逻辑1:-15 ~ -3V

逻辑0:+3 ~ +15V

2.2    CMOS电平(STM32)

逻辑1:3.3V

逻辑0:0V

2.3    TTL电平(51)

逻辑1:5V

逻辑0:0V

2.4    连接方式

  • 232串口两设备连接:
  • STM32与电脑通信原理:

3    U(S)ART

3.1    简介

  • 都能全双工异步通信;
  • USART多了同步通信功能,但平时用它也比较少用它的同步功能;

3.2    查看芯片U(S)ART数量

《ST MCU选型手册》

3.3    查看U(S)ART对应引脚

芯片数据手册,如《STM32F103ZET6(中文版)》- 引脚定义

3.4    波特率计算公式

baud=\frac{f_{ck}}{16*USARTDIV}

其中f_{ck}是串口的时钟,如:USART1的时钟是PCLK2,其他串口都是PCLK1。

注意⚠️:
        这个式子其实不是为了计算波特率,而是为了计算USARTDIV的数值,其包括整数部分和小数部分,存储于USART_BRR寄存器中,是为了配置USART发送器时钟的。

3.5    使用寄存器设置波特率的示例

其中,+0.5是为了让其四舍五入,否则因为强制类型转换,小数部分直接会被忽略。


简化计算过程后,通用过程为:

3.6    HAL库异步通信配置

其中根据四步法的逻辑,可以分为:

1.    初始化

        (1)    串口参数设置:HAL_UART_Init();

        (2)    时钟设置:重写HAL_UART_MspInit(),在其中开启GPIO及UART的时钟;

        (3)    IO设置:重写HAL_UART_MspInit()中设置GPIO的配置;

        (4)    中断设置:重写HAL_UART_MspInit()中使能中断,并设置中断优先级,使用HAL_UART_Receive_IT()函数开启中断,可以理解为开启串口阻塞(实际上并不阻塞);

2.    定义读函数:

3.    定义写函数:

4.    编写中断服务函数:

        (1)    重写UARTx_IRQHandler()函数,调用UART的串口公用数据处理函数;

        (2)    重写接收完毕的回调函数HAL_UART_RxCpltCallback(),实现自定义的接收完成后动作,并在最后重新调用HAL_UART_Receive_IT()开启串口中断,因为接收完毕后串口中断就用完了(对,一次性的)。

3.7    详细的解析

其中根据四步法的逻辑:

1.    初始化

        (1)    串口参数设置: 

        (2)    时钟设置: 

        (3)    IO设置:其中串口的上下拉状态由芯片串口通信的电平时序图来决定,如下: 

        由于图中空闲时为高电平,因此就是要设置上拉。

        (4)    中断设置:注意注意⚠️!HAL_UART_Receive_IT()启用串口不可以写在HAL_UART_MspInit()函数内,因为其执行的条件是串口的状态是Ready,而只有HAL_UART_Init()执行完毕后,串口状态才会从Reset改为Ready。也就是说在HAL_UART_Init函数内部,在执行完HAL_UART_MspInit后,还有一些内容要执行,因此写在HAL_UART_MspInit函数内的HAL_UART_Receive_IT事实上是无法得到执行的。

2.    定义读函数:

3.    定义写函数:

4.    编写中断服务函数:

        (1)    中断服务函数中调用的HAL库公共数据处理函数可以将中断的标志位清空,因此在执行完毕后才需要重新调用HAL_UART_Receive_IT()开启阻塞

        小思考:在GPIO中断中无需手动开启可能是因为在GPIO配置中就配置了

        (2)    在接收完毕回调函数、串口中断服务函数等场合,应首先通过串口外设的句柄对接收的信号进行来源判断,因为有可能多个串口都开启了,但其各自的反应需要定义成不同的逻辑。

  • 注意事项⚠️

        在正点原子的相关教程中,在使用HAL_UART_Transmit函数发送串口数据后,会利用__HAL_UART_GET_FLAG函数读取SR寄存器的TX位配合while循环进行阻塞以保证信息的发送完毕,但事实上在HAL_UART_Transmit函数中已有类似的机制,因此是不需要进行手动阻塞的。

3.8    相关的HAL库文件(可以去这里找用到的函数和宏定义)

stm32f1xx_hal_uart.c

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

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

相关文章

LEAP模型在能源环境发展、碳排放建模预测及分析中实践应用

采用部门分析法建立的LEAP(Long Range Energy Alternatives Planning System/ Low emission analysis platform,长期能源可替代规划模型)是一种自下而上的能源-环境核算工具,由斯德哥尔摩环境研究所和美国波士顿大学联合研发。该模…

后端Web之登录校验(上篇)

目录 1.概述 2.会话技术 3.JWT令牌 1.概述 基础的登录功能实际上就是查询数据库中有没有输入的用户和密码,有就放行,没有就返回错误信息,根据三层架构进行开发: controller层: service层: mapper层&…

Visual C++ 的免费绘图库 EasyX下载安装

EasyX Graphics Library 是针对 Visual C++ 的免费绘图库,支持 VC6.0 ~ VC2022,简单易用,学习成本极低,应用领域广泛。目前已有许多大学将 EasyX 应用在教学当中。 下载地址:EasyX Graphics Library for C++ 1、应用 2、文中有很多的C++应用案例 3、编程需要的数学知识 …

19530 2的幂次方表示

### 思路 1. **分解为2的幂次方**:将输入的正整数n分解为若干个2的幂次方之和。 2. **递归表示**:使用递归的方法将每个幂次方表示为2的幂次方形式。 3. **组合结果**:将所有的幂次方表示组合成最终的结果。 ### 需要注意的点 - 需要处理幂次…

8.21 补题

六题 C 16进制世界 链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 这是一个16进制的世界,比如522的16进制是20A。 在5月22日那天,有人送给Bob一些月饼,每个月饼有饱食度和幸福度两个属性。 现…

计算机网络面试真题总结(二)

文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 在浏览器中输入 URL 地址到显示主页的过程? URL解析&a…

【记录】基于Windows系统安装rust环境的过程

到官网下载安装包【入门 - Rust 程序设计语言 (rust-lang.org)】 ![[Pasted image 20240703142911.png]] 选择1,快速安装 选择编译配置,1为标准 安装完成 验证是否安装完毕 rustc --versioncargo --version验证成功!

【数据结构篇】~二叉树(堆)

【数据结构篇】~二叉树(堆) 二叉树1.树2.树的组成3.二叉树4.堆1.向上调整算法2.向下调整算法3.堆排序 4.topk问题源码 二叉树 1.树 树的概念与结构​ 树是一种非线性的数据结构,它是由 n(n>0) 个有限结点组成一个…

利用“2+1链动模式小程序AI智能名片S2B2C商城源码”优化企业参与外部社群策略

摘要:在当今数字化时代,企业参与外部社群已成为其市场扩张、品牌塑造及用户增长不可或缺的一环。然而,面对浩如烟海的社群类型,包括行业论坛、地区性论坛、特定兴趣爱好的论坛以及短视频网站等,如何精准选择并有效介入…

16.C基础_内存管理

内存分区 1、整体框图 内存分为代码区、全局区、栈区、堆区。代码区和全局区在代码编译完之后就已经确定,栈区和堆区是在程序运行时进行开辟和释放的。整体内存分区框图如下: 对于一个进程,它一共有4G的空间,其中0~3G为上述的4个…

Flask+LayUI开发手记(三):LayUI表格的后端数据分页展现

前几天写了数据表格table的前端分页展现,思路是把数据一次性取到前端,然后由前端来控制分页展现。这种做法主要目的是为了降低后端数据库读写的次数减轻服务端运行压力。但是,如果功能不单是查询还要进行增删改操作,那么一次数据提…

自制项目镜像并拉取

1.先把项目jar包拉到Linux上看能用不 mvn clean package cd target java -jar shared_battery-0.0.1-SNAPSHOT.jar 成功!!!!!!!!!!!!&…

24-8-24-读书笔记(十五)-《空谷幽兰》([法] 巴尔扎克 [译] 李玉民 )

文章目录 《空谷幽兰》([法] 巴尔扎克 [译] 李玉民 )阅读笔记记录(P112-P126)总结 《空谷幽兰》([法] 巴尔扎克 [译] 李玉民 ) 《空谷幽兰》巴尔扎克最为得意的作品,这篇主要记录一个德莫尔索夫…

SSRF漏洞实现

文章目录 SSRF题1SSRF题2fastcgi方法 入侵网站收集资产方法SSRF反弹 SSRF题1 漏洞复现平台 代码: 首先,可以用dict探测一下内网开放的端口 可以检测是否有fastcgi或者是redis,如果有fastcgi,那么就有RCE漏洞破解,如…

Adobe Animate (AN)软件安装,硬件配置(附安装包)

目录 一、Adobe An 软件简介 Adobe An 软件的特点 Adobe An 软件的优势 下载 二、Adobe An 软件安装 安装前的准备工作 安装过程中的注意事项 安装后的设置 三、Adobe An 软件使用 高级动画技巧 交互设计 优化与性能提升 四、Adobe An 软件快捷键 选择工具快捷键…

专业级推荐:2024年硬盘数据恢复软件全攻略

硬盘作为我们存储珍贵数据、工作文档、家庭照片以及个人视频的核心载体,其重要性不言而喻。然而,随着使用时间的增长或是操作不当硬盘可能会遭遇损坏。遇到这种问题我们要怎么挽救自己的数据呢,这次我就来分享下我用过的硬盘数据恢复软件。 …

基于Netty的RPC框架

RPC远程过程调用(Remote Procedure Call)是一种通信协议,它允许程序调用位于不同地址空间(通常是网络上的另一台机器)的方法,而无需程序员显式编码这个远程调用的细节。这种技术隐藏了底层的通讯细节,使得调用远程服务…

中国数据库的崛起:从本土化挑战到全球化机遇

引言 谈起中国的崛起,大家第一反应可能是“中国制造”“高铁奇迹”“电商帝国”,但今天我们要聊的,是一个比这些还要神秘的存在——中国的数据库技术。或许你平时并不会经常关注它,但这个隐身在你手机、电脑、服务器背后的无形力…

Towards Enriched Controllability for Educational Question Generation

文章目录 题目摘要引言生成显式和隐式问题实验设置结果基线结论 题目 迈向教育问题生成的丰富可控性 论文地址:https://arxiv.org/abs/2306.14917 摘要 问题生成 (QG) 是自然语言处理 (NLP) 中的一项任务,涉及根据输入自动生成问题,输入通常由文本和目标…

在进行网站链接时,‌加上http或https的重要性不言而喻

这一简单的操作背后,‌蕴含着对搜索引擎优化(‌SEO)‌的深刻理解,‌以及对网站权重提升的精准把握。‌以下,‌我们将深入探讨这一话题,‌以期为您的网站优化提供有价值的参考。‌优化(‌SEO&…