首页 > 其他分享 >stm32入门教程--USART外设 超详细!!!

stm32入门教程--USART外设 超详细!!!

时间:2024-10-31 17:15:36浏览次数:3  
标签:USART -- 寄存器 入门教程 校验 串口 波特率 数据

目录

简介

什么是UART?

什么是USART?


简介

USART(Universal Synchron /Asynchronous Receiver /Transmitter)通用同步/异步收发器

 1、USART是STM32内部集成的硬件外设,可根据数据寄存器的一个字节数据自动生成数据帧时序,从TX引脚发送出去,也可以自动接收RX引脚的数据帧时许,拼接为一个字节数据,存放在数据寄存器里。

2、自带波特率发生器,最高达4.5Mbit/s

3、可配置数据位长度(8/9)、停止位长度(0.5/1/1.5/2)

4、可选校验位(无校验/奇校验/偶校验)

5、支持同步模式、硬件流控制、DMA、智能卡、IrDA、LIN

6、STM32F103C8T6 USART资源:USART1、USART2、USART3

什么是UART?

我们经常会遇到串口 叫UART,这少了个s,就是异步收发器,一般串口很少使用这个功能,所以其实UART和USART使用起来,也没有什么区别,其实STM32的USART模式就是比UART多了个时钟输出,它只支持时钟输出,不支持时钟输入,所以这个同步模式更多的是为了兼容别的协议或特殊用途而设计的,并不支持两个USART之间进行同步通信,所以我们学习串口主要还是异步通信。

什么是USART?

USART是STM32内部集成的硬件外设,可根据数据寄存器的一个字节数据自动生成数据帧时序,从TX引脚发送出去,也可以自动接收RX引脚的数据帧时许,拼接为一个字节数据,存放在数据寄存器里。

我们之前的串口协议,主要就是(如上图)靠收发这样的、约定好的波形来进行通信的,那USART外设,就是串口通信的硬件支持电路

USART大体可以分为发送和接收两部分 ,发送部分就是将数据寄存器的一个字节数据,自动转为协议规定的波形,从TX引脚发出,接收部分就是自动接收RX引脚的波形,按照协议规定,解码为一个字节数据,存放在数据寄存器里 ,这就是USART电路的功能当我们配置好USART,直接读写数据寄存器,就能自动发送和接受数据了。

下一条,自带波特率发生器,这个波特率发生器,就是用来配置波特率的 ,他其实就是一个分频器,比如我们APB2总线给个72MHz的频率,然后波特率发生器进行一个分频,得到我们想要的波特率时钟 ,最后在这个时钟下,进行收发,就是我们指定的通信波特率。

可配置数据位长度(8/9)、停止位长度(0.5/1/1.5/2),这些就是stm32USART支持配置的参数了,这个数据位长度就是我们前面的参数,有8位和9位。 9位就是包含奇偶校验位的长度,一般不需要奇偶校验位就是八位,需要就是九位

就是在连续发送时,停止位的长度决定了帧的间隔,我们最常用的的就是1位停止位,其他很少用。

下一点可选校验位,有无校验、奇校验、偶校验、但我们比较常用的是无校验。

以上的自带波特率发生器、数据为长度、可选校验位都可以通过配置寄存器来完成,使用库函数配置的话就更简单了,直接给结构体赋值就行。

 串口通信我们最常用的就是波特率 11520或 9600,数据位8位,停止位1位,无校验。

下一条,同步模式,就是多了个时钟CLK的输出;硬件流控制,这个是比如A设备有个TX向B设备的RX发送数据,A设备一直在发,发的太快了,B处理不过来,如果没有硬件流控制,那B就只能抛弃新数据或者覆盖原数据了,如果有硬件流控制,在硬件电路上就会多一根线 ,如果B没准备好接收,就置高电平,如果准备好了,就置低电平,A接收到了B反馈的准备信号,就只会在B准备好的时候,才发送数据,然后B没准备好,那数据就不会发送出去。

这就是硬件流控制,可以防止B处理慢而导致数据丢失的问题

硬件流控制STM32也是有的,不过我们一般不用

DMA是这个串口支持DMA进行数据转运 ,如果有大量的数据进行收发 ,可以使用DMA进行转运数据,减轻CPU的负担。

标签:USART,--,寄存器,入门教程,校验,串口,波特率,数据
From: https://blog.csdn.net/weixin_61733189/article/details/143406110

相关文章

  • 程序员修炼之道阅读笔记03
    阅读《程序员修炼之道:从小工到专家》的第三章“基本工具”有感这次阅读犹如打开了一扇通往高效编程世界的大门,让我对程序员所依赖的工具以及如何更好地运用它们有了更深刻的认识。这一章首先强调了工具对于程序员的重要性,它们就如同工匠手中的利器,能极大地提高工作效率和质量。......
  • STL
    队列(queue)#include<queue>queue<int>q;q.push(x);//在队尾加入xq.pop();//队首元素出队q.clear();//清空队列q.empty();//判断队列是否为空优先队列(priority_queue)#include<queue>priority_queue<int>q; //默认大根堆priority_queue<int,vecto......
  • 记录springboot 3.3.5 版本整合 swagger +spring security + jwt
    springboot版本security版本wagger版本jwt版本redis版本pom文件如下引入redis是为了存储token<version>3.3.5</version><!--security--><dependency><groupId>org.springframework.boot</groupId><arti......
  • 35. PyMySQL
    1. PyMySQL模块介绍1.1 什么是DB-APIPython标准数据库规范为DB-API,DB-API定义了一系列必须的对象和数据库操作方式,以便为各种数据库系统和数据库访问程序提供一致的访问接口。1.2数据库操作模块DB-API接口封装成数据库操作模块,PyMySQL是python操作MySQL数据库的一种模块......
  • mysql 连表查询太慢
    优化joinon性能,解决联表查询慢的问题这里只提供一种方式啊,就是如果连表有查询条件,那就先把条件查了,然后再连表,这个很有用比如:pub_user1与pub_user2有相同的字段user_id直接这么写会多查询很多数据SELECTa.user_id,a.user_name,b.user_c......
  • 序列型动态规划
    1、小蜘蛛题目描述zty一共养了n只小蜘蛛,第i只小蜘蛛有一个编号Ai,这n只小蜘蛛的编号恰好构成了一个长度为n的排列。小蜘蛛们在交友时总喜欢站成一排。他们的交友方式也很特别,每只小蜘蛛只会主动和在自己左方,且离自己最近的编号比自己小的小蜘蛛成为好朋友。若不存在,则不......
  • 网络编程-计算机网络三要素
    1.计算机网络三要素网络编程:使用编程语言实现多台计算机的通信网络编程三大要素- ip地址:网络中每一台计算机的唯一标识,通过IP地址找到指定的计算机- 端口:用于标识进程的逻辑地址,通过端口找到指定进程。- 协议:定义通信规则,符合协议则可以通信,不符合不能通信,一般有TCP协议......
  • bellman_ford算法原理
    是什么松弛在《算法四》中,对松弛的解释是:relaxtheedge,看起来比较抽象,不过如果我们从生活中的实例去理解,就简单多了:试想一根绳索,当你握着绳索的两头使劲用力拉伸时,绳子紧绷,长度会变长;而当你减小用力时,绳子松弛,长度会变短。当你没有用任何力时,此时绳子的长度最短。这里当用力减......
  • 非煤矿山算法智慧矿山一体机皮带跑偏识别非煤矿山监控系统对提升生产效率有哪些帮助?
    在当今这个科技迅猛发展的时代,各个行业都在积极寻求通过智能化转型来提升工作效率、确保作业安全和优化资源配置。非煤矿山行业,作为国家经济的重要组成部分,同样承受着技术革新和安全管理的双重压力。在这一背景下,引入非煤矿山算法智慧矿山一体机对提高非煤矿山的安全监管能力、预......
  • 网络编程-OSI模型
    OSI模型OSI是opensysteminterconnection的缩写,译为“开放式系统互联”。OSI模型把网络通信的工作分为7层,从下到上分别是物理层,数据链路层,网络层,传输层,会话层,表示层和应用层。OSI七层网路模型和TCP/IP四层网络模型的对比。网络模型:就是进行数据封装的。当另一台计算机......