【STM32】| 01——常用外设 | USART

系列文章目录
【STM32】| 01——常用外设 | USART


失败了也挺可爱,成功了就超帅。

文章目录

  • 前言
  • 1. 基础理论
    • 1.1 并行通信和串行通信
    • 1.2 同步通信和异步通信
    • 1.3 单工/半双工/全双工
    • 1.4 电平信号(RS232/TTL)和差分信号(RS485)
    • 1.5 端口(COM)
  • 2. 串口理论
    • 2.1 串口物理连接
      • 2.1.1 多个单片机之间串口连接
      • 2.1.2 单片机和其他设备连接
    • 2.2 串口数据信号
    • 2.3 MCU串口外设
  • 3. 串口实践
    • 3.1 串口查询式收发
      • 3.1.1 Cubemx配置
      • 3.1.2 编写发送代码
      • 3.1.3 编写接收代码
      • 3.1.4 查询式收发的应用场景
    • 3.2 串口中断式收发
    • 3.3 串口DMA收发
    • 3.4 串口DMA空闲空断接收
    • 3.5 环形缓冲区

前言

本文描述串口相关原理、配置及使用
如基础收发功能、串口+DMA+IDEL接收一帧数据、防止数据丢失加入环形缓冲区等
环境:stm32f103zet6 keil HAL库

1. 基础理论

串口能干吗 可以用来通信。串口通信是我们常用的设备通信方式。下面先从涉及的相关概念说起

1.1 并行通信和串行通信

一般通信方式可以分为两类
1、串行通信 如串口、SPI、IIC等
2、并行通信 如SRAM等
在这里插入图片描述

1.2 同步通信和异步通信

在这里插入图片描述

1.3 单工/半双工/全双工

根据数据传输方向可以分为这三种
在这里插入图片描述

1.4 电平信号(RS232/TTL)和差分信号(RS485)

他们都用于串口。TTL、RS232/485都算电器上标准 都是基于串口的 这里简单大概介绍详细的可自行看下哦
在这里插入图片描述
TTL应用:单片机连接电脑通过串口助手通信:单片机如果没板载 串口转TTL的芯片的话 就需要通过 单片机串口接 USB转TLL然后插到电脑上
其他也需要相应的转换器或板载转换芯片

1.5 端口(COM)

一般我们指物理接口 比如DB9
当我们用串口助手 时需要选择 COM几
因为电脑识别到串口设备后显示为端口 COM几
USB-TTL/RS232/485 都会识别为端口

2. 串口理论

串口通信是串行通信的一种。也是全双工异步通信。

2.1 串口物理连接

串口接线 中有最多 5根 TX/RX/RTS/CTS/GND
一般我们只用 TX/RX/GND 3根
其他两根用作流控:即通信过程中 握手

2.1.1 多个单片机之间串口连接

MCU通常带有串口功能 直接使用串口对应引脚连接就可以
在这里插入图片描述

2.1.2 单片机和其他设备连接

串口和电脑连接
1、单片机板载USB转串口 如板载CH340芯片等
在这里插入图片描述

2、单片机通过外部USB转TTL 连接电脑

在这里插入图片描述
单片机和传感器串口连接
1、单片机连接输出RS485信号的传感器
在这里插入图片描述
在这里插入图片描述
以上列举了几种
总结
单片机(TTL)串口连接 RS232/485需要进行相应转换

2.2 串口数据信号

串口数据按照以下方式 每次传输一字节数据 数据按一位一位传输 从数据低位到高位。
1个起始位+8个数据位+1个校验位(有/无)+停止位
下图是串口数据帧组成

在这里插入图片描述
奇校验:数据位中1的个数为奇数 该位为1 反之为0
如数据位 00101101 4个1偶数 奇校验该位为1 偶校验该位为0

用逻辑分析仪抓取串口实际波形
在这里插入图片描述

还有传输最重要的参数 那就是传输速度。
串口的传输速度称为波特率 只有在相同波特率下才可以通信
在这里插入图片描述

所以我们在使用串口时需要配置它的波特率 数据位停止位 校验位这几个参数。

2.3 MCU串口外设

不同厂商的都大同小异 我这里以stm32为例
我们通过看查 STM32参考手册 去看串口详细描述即功能框图
通过看查我们可以了解到 stm32 USART外设 通用同步异步串口收发器
也就是说这个串口也可以同步用也可以异步全双工 它还有其他额外功能
比如 支持IRDA SIR(串行红外)、智能卡模拟还有一些检测校验等。
下面我们详细看下他的功能框图

在这里插入图片描述

在这里插入图片描述

发送一个数据 先给到发送数据寄存器 通过移位寄存器一位一位送走
接收一个数据从接收数据寄存器获取
具体一些含义通过阅读相关寄存器描述可以很清楚了解这里就步多说了
总的来说 我们使用这个串口外设时候有很多功能 比如发送完成会产生中断
接收也可以 空闲检测等等这些在一些数据处理或应用中极其有用。
多读参考手册 多翻寄存器 对底层了解清楚那么遇到一些问题就很容易解决

3. 串口实践

主要讲述 HAL库所以 使用Cubemx生成 记录如何配置以及使用起来

3.1 串口查询式收发

3.1.1 Cubemx配置

新建好对应芯片工程后
首先配置时钟系统 使用HSE外部晶振 系统时钟设置为最高 STM32F103 72MHZ请添加图片描述

开始配置串口 我们用串口1
我们可以看到配置波特率 停止位 校验位 数据位选项 然后
软件自动帮我们配置了串口1默认引脚
请添加图片描述

3.1.2 编写发送代码

可以通过 functions选项看查usart HAL库函数API
请添加图片描述

每秒发送程序运行次数
请添加图片描述

3.1.3 编写接收代码

可以看到虽然我有时一次发送了好几个字节 实际串口一直是一个一个接收发送的
请添加图片描述

3.1.4 查询式收发的应用场景

查询式发送:发送数据/重定向printf (调用printf即可在串口助手显示相关内容 如输出调试信息等)
查询式接收:我们一般不用这种方式接收数据 因为需要阻塞等待接收/不断检测接收 影响程序执行 占用资源
查询式缺点:实时性差

所以一般没特殊要求的话 发送采用查询式发送 接收采用中断式

重定向printf方法
1、使用 MicroLIB 库
引入微型C标准库 头文件添加 stdio.h 重定义 fputc 即可
在这里插入图片描述
效果
请添加图片描述

2、不用微库 使用自定义kprintf 格式化输出
请添加图片描述

3.2 串口中断式收发

3.3 串口DMA收发

3.4 串口DMA空闲空断接收

3.5 环形缓冲区

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android - CrashHandler 全局异常捕获器

官网介绍如下:Thread.UncaughtExceptionHandler (Java Platform SE 8 ) 用于线程因未捕获异常而突然终止时调用的处理程序接口。当线程由于未捕获异常而即将终止时,Java虚拟机将使用thread . getuncaughtexceptionhandler()查询该线程的UncaughtExceptio…

cisp难不难?cisp如何备考通过率高?

*CISP 全称为Certified Information Security Professional,是国际上广受欢迎的信息安全专业认证之一。 对于许多信息安全领域的从业者来说,CISP认证是他们职业生涯中的重要一步。那么,CISP难不难呢?如何备考通过率更高呢?接下来&#xf…

electron自定义窗口和右键菜单样式

前言 electron默认沿用系统UI,并没有提供很多接口供使用者定制样式,如果想要完全自定义的样式,目前我能想到的方案只能是通过前端自定义样式,然后通过进程通信来实现系统基础功能:最大/小化、关闭、拖动窗口等。 效果…

关于java的冒泡排序

关于java的冒泡排序 我们前面的文章中了解到了数组的方法类Arrays,我们本篇文章来了解一下最出名的排序算法之一,冒泡排序!😀 冒泡排序的代码还是非常简单的,两层循环,外层冒泡轮数,里层依次比…

伺服电机:编码器原理与分类

什么是编码器? 编码器是将旋转位置的改变转换为电气信号。 编码器是伺服系统闭环控制不可缺少的部件,编码器应用在轴的闭环控制和大多数的自动化控制中。编码器为闭环控制提供位置或速度的实际测量值。 一、编码器的分类 从编码器的原理和产生的信号类…

Cypress.io:快速简单可靠的浏览器测试工具 | 开源日报 No.142

cypress-io/cypress Stars: 45.5k License: MIT Cypress.io 是一个快速、简单和可靠的浏览器测试工具,可以用于任何在浏览器中运行的内容。它支持 Mac、Linux 和 Windows 系统,并提供了安装指南。 hrvach/deskhop Stars: 4.1k License: GPL-3.0 DeskH…

ansible基础概念

一、【写在前面】 前面断更了几天,笔者被流感给干倒了,去拍了个核磁,给我脑子干成脱髓鞘了,也不知道是之前新冠导致的还是如何,哎要变成愚蠢的低级动物了……稍微恢复一点体力,今天赶快来博客水一水文章。…

代码随想录-刷题第五十二天

300. 最长递增子序列 题目链接:300. 最长递增子序列 思路:动态规划五步曲: dp[i]表示从0到i,以nums[i]结尾的最长递增子序列的长度。 递推公式:if(nums[i]>nums[j]) dp[i] max(dp[i], dp[j] 1) 位置i的最长升序…

MFC 多文档视图架构

目录 多文档视图架构 模仿多文档视图架构 执行流程 多文档视图架构 一个多文档视图架构运行后会是下面的样子: 内部的子框架窗口就相当于一个单文档视图架构,多文档视图架构就相当于在外面套一层框架窗口。 特点:可以管理多个文档(可以有…

Armv8-R AArch32 architecture概念学习

提示 该博客主要为个人学习,通过阅读官网手册整理而来(个人觉得阅读官网的英文文档非常有助于理解各个IP特性)。若有不对之处请参考参考文档,以官网文档为准。阅读该文章,可以先查看AArch64 Exception Model学习&…

SSM 基础知识点

1. IoC IoC—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在 Java 开发中,IoC 意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。 谁控制谁,控制什么&…

C语言中关于函数递归的理解

递归的概念:如果一个对象部分包含它自己,或者利用自己定义自己,则称这个对象是递归的;如果 一个过程直接或间接调用自己,则称这个过程是一个递归过程。递归的主要思考方式在于:将大事化小 我们先看一个例子 题目:输入一个无符号数&#xff0…

软考高级系统架构设计师考试经验分享

文章目录 1. 软考介绍(1)什么是软考(2)软考的作用(3)软考各科目的难度(4)考试时间(5)考试形式 2.系统架构设计师备考经验(1)辅导资料&…

【2024系统架构设计】 系统架构设计师第二版-嵌入式系统架构设计理论与实践

目录 一 嵌入式系统软件架构的原理 二 嵌入式系统软件架构的设计方法 三 案例分析 一 嵌入式系统软件架构的原理 🚀嵌入式系统的典型架构可以分为

51单片机四位数码管计算器 Proteus仿真程序

目录 概要 仿真图 部分代码 资料下载地址:51单片机四位数码管计算器 Proteus仿真程序 概要 1.系统通过4x4的矩阵键盘输入数字及运算符。 2.可以进行4位十进制数以内的加法运算,如果计算结果超过4位十进制数,则屏幕显示E 3.可以进行加法以外…

c语言:输入成绩,统计不及格人数|练习题

一、题目 输入学生成绩&#xff0c;统计不及格的学生人数 二、代码截图【带注释】 三、源代码【带注释】 #include <stdio.h> //题目&#xff1a;输入成绩&#xff0c;统计不及格人数 //思考分析 //1、由于学生人数是未知数&#xff0c;所以可以在输入时&#xff0c;以0…

微信小程序如何自定义导航栏,怎么确定导航栏及状态栏的高度?导航栏被刘海、信号图标给覆盖了怎么办?

声明&#xff1a;本文为了演示效果&#xff0c;颜色采用的比较显眼&#xff0c;可根据实际情况修改颜色 问题描述 当我们在JSON中将navigationStyle设置成custom后&#xff0c;当前页面的顶部导航栏就需要我们制作了&#xff0c;但出现了一下几个问题&#xff1a; 导航栏的高…

Java缓冲字符流

PrintWriter的自动行刷新功能 如果实例化PW时第一个参数传入的是一个流&#xff0c;则此时可以再传入一个boolean型的参数&#xff0c;此值为true时就打开了自动行刷新功能。 即: 每当我们用PW的println方法写出一行字符串后会自动flush. package io; ​ import java.io.*; i…

解决在eclipse2021中,用mysql-connector-java-8.0.18.jar不兼容,导致无法访问数据库问题

1.环境场景 组件版本mysql5.7.44mysql-connector-java80.18 2. 问题描述 报mysql-connector-java 驱动连不上mysql数据库。 3. 可能的原因分析 查看数据库连接句柄是否对 如果数据库连接句柄中没有 useSSLfalse 的话可能会导致这样的问题。 就像下面这样&#xff1a; jdb…

Kavita - 一款全功能跨平台阅读服务器​

​#软件 #阅读器 #开源 ​ ​ Kavita - 一款全功能跨平台阅读服务器 ​ ​软件功能: 图书阅读器 ​ ​支持平台: #Windows #MacOS #Linux ​ ​软件介绍: 一个快速、功能丰富的跨平台阅读服务器。致力于成为满足您所有阅读需求的完整解决方案。 ​ ​支持阅读漫画、连…