STM32 USART 补充

串口通讯的数据包:发送设备通过自身的TXD接口传输到接收设备的RXD接口。

串口通讯的协议层中,规定了数据包的内容,由起始位、主体数据、校验位、停止位组成,通讯双方的数据包格式要约定一致才能正常收发数据。

异步通讯:不使用时钟信号进行数据同步,它们直接在数据信号中穿插一些同步用的信号位,或者把主体数据进行打包,以数据帧的格式传输数据,有时还需要双方约定数据的传输速率,以便更好地同步。异步通讯中会包含帧的各种标识符,异步通讯双方的时钟允许误差较大。

“波特率” (Baudrate):表示每秒钟传输了多少个码元。异步通讯中由于没有时钟信号,以两个通讯设备之间需要约定好波特率。

数据包的起始信号由一个逻辑0的数据位表示;数据包的停止信号由0.5、1、1.5或2个逻辑1的数据位表示,只要双方约定一致即可。

数据包的起始位之后是要传输的主体数据内容,有效数据的长度常被约定为5到8位。

有效数据之后是可选的数据校验位,校验方法有奇校验(odd)、偶校验(even)、0校验(space)、1校验(mark)、无校验(noparity)。

奇校验:有效数据和校验位中1的个数为奇数。如果有效数据为11110000,4个1,为达到奇校验,校验位为1。

偶校验:有效数据和校验位中1的个数为偶数。

0校验校验位总为0;1校验校验位总为1。

全双工:在同一时刻,两个设备之间可以同时收发数据。

串行通信:同一时刻只能传输一个数据位的数据。串行通讯可以节省数据线的硬件成本。以帧格式传输数据,即是一帧一帧的传输,每帧包含有起始信号、数据信息、停止信息,可能还有校验信息。

UART(Universal Asynchronous Receiver and Transmitter):异步通讯、串行通信、可以支持全双工。

USART功能框图

USART功能框图如下。

在这里插入图片描述

TX:发送数据输出引脚。

RX:接收数据输入引脚。

SCLK:发送器时钟输出引脚。

nRTS、nCTS的n表示低电平有效。

nRTS:请求以发送(Request To Send),如果使能RTS流控制,USART接收器准备好接收新数据时就会将nRTS变成低电平;当接收寄存器已满时, nRTS 将被设置为高电平。该引脚只适用于硬件流控制。

nCTS:清除以发送(Clear To Send),如果使能CTS流控制,发送器在发送下一帧数据之前检测nCTS引脚,低电平,表示可以发送数据;高电平,发送完当前数据帧之后停止发送。只适用于硬件流控制。

STM32F103VET6系统控制器有三个USART 和两个UART,USART1时钟来源于 APB2 总线时钟,最大频率72MHz,其他四个的时钟来源于APB1总线时钟,最大频率为36MHz。UART异步传输,没有SCLK、nCTS、nRTS功能引脚。

USART数据寄存器(USART_DR):包含两个寄存器TDR和RDR。进行发送操作时,向USART_DR写入数据会自动存储在TDR内;进行读取操作时,向USART_DR读取数据会自动提取RDR数据。

TDR和RDR:在系统总线和移位寄存器之间,串行通信一个位一个位传输,发送时,把TDR内容转移到发送移位寄存器,然后把移位寄存器数据每一位发送出去;接收时,把接收到的每一位顺序保存在接收移位寄存器内,然后转移到RDR。

USART控制寄存器1(USART_CR1):USART_CR1寄存器的UE位开启串口的时钟,使用USART之前,需要UE位置1使能USART。USART_CR1的M位控制发送或者接收数据字长是8位还是9位,USART_DR只有低9位有效,第9位数据是否有效要取决于M位,当M位为0时表示8位数据字长,当M位为1表示9位数据字长。

发送

发送器:USART_CR1寄存器的发送使能位TE置1时,启动数据发送。发送移位寄存器的数据在TX引脚输出,低位前高位后。同步模式下SCLK也输出时钟信号。

一个普通字符帧有三部分,起始位、数据帧、停止位。

位周期:每一位占用的时间。

起始位:一个位周期的低电平。

数据帧:要发送的8位或9位数据,从最低位开始传输。

停止位:一定时间周期的高电平。停止位时间长短由USART_CR2的STOP[1:0]位控制,可选0.5、1、1.5、2个停止位,默认1个停止位。

发送8位字长,使用1个停止位,USART字符发送时序图如下,时钟是SCLK。

在这里插入图片描述

在USART_DR寄存器中写入最后一个数据字后,要等待USART状态寄存器(USART_SR)的TC=1,它表示最后一个数据帧的传输结束。

数据传输完成后,如果USART_CR1寄存器的TCIE位置1,将产生中断。

USART状态寄存器(USART_SR):TXE,发送寄存器为空,发送单个字节的时候使用。TC,发送完成,发送多个字节数据的时候使用。

接收

USART_CR1寄存器的RE位置 1,使能USART接收。使得接收器在RX线开始搜索起始位。

起始位侦测:在USART中,如果辨认出一个特殊的采样序列,就认为侦测到一个起始位。序列为:1110 X0X0X0 000。

在这里插入图片描述

如果该序列不完整,那么接收端将退出起始位侦测并回到空闲状态(不设置标志位)等待下降沿。

确定到起始位后,根据RX线电平状态,把数据存放在接收移位寄存器内。

接收完成,把接收移位寄存器数据移到RDR内,并把USART_SR寄存器的RXNE位置1,表明读数据寄存器非空。

如果USART_CR2寄存器的RXNEIE发送完成中断使能位置1的话可产生中断。

小数波特率

发送器和接收器使用相同的波特率。公式如下。

在这里插入图片描述

USARTDIV是存放在波特率寄存器(USART_BRR)的无符号定点数。写入USART_BRR之后,波特率计数器会被波特率寄存器的新值替换。不要在通信进行中改变波特率寄存器的数值。DIV_Mantissa[11:0]位定义USARTDIV 的整数部分,DIV_Fraction[3:0]位定义USARTDIV的小数部分。

fck是是给外设的时钟(PCLK1用于USART2、3、4、5,PCLK2用于USART1)。

USART1 fPLCK=72MHz,得到115200bps的波特率如何设置寄存器。

在这里插入图片描述

USARTDIV=39.0625,DIV_Fraction=0.0625*16=1=0x01,DIV_Mantissa=39=0x17,设置USART_BRR的值为0x171。

校验

使用校验位时,串口传输的长度将是数据帧加上1位的校验位。每个字符帧的格式将变成:起始位+数据帧+校验位+停止位。

USART_CR1寄存器的PCE位置1,启动奇偶校验控制,奇偶校验由硬件自动完成。

启动了奇偶校验控制后,发送数据帧时自动添加校验位,接收数据时自动验证校验位。

如果奇偶校验位验证失败,USART_SR寄存器PE位置1,产生奇偶校验中断。

USART中断请求事件:

中断事件事件标志使能控制位
发送数据寄存器为空TXETXEIE
CTS 标志CTSCTSIE
发送完成TCTCIE
准备好读取接收到的数据RXNERXNEIE
检测到上溢错误ORERXNEIE
检测到空闲线路IDLEIDLEIE
奇偶校验错误PEPEE
断路标志LBDLBDIE
多缓冲通信中的噪声标志、 上溢错误和帧错误NF/ORE/FEEIE

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

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

相关文章

ROS TF变换

静态坐标转换:机器人本体中心到雷达中心的转换。因为激光雷达可能没安装到机器人的中心。 动态坐标转换:机器人中心和里程计坐标的变换。机器人从起点出发后,里程计坐标相对于本体就会产生一个偏移,这个偏移随着机器人的运动不断…

ROS底盘控制节点 源码分析

先在机器人端通过launch文件启动底盘控制。 robot:~$ roslaunch base_control base_control.launch ... logging to /home/jym/.ros/log/3e52acda-914a-11ec-beaa-ac8247315e93/roslaunch-robot-8759.log Checking log directory for disk usage. This may take a while. Pres…

ROS + OpenCV

视觉节点测试 先进行一些测试。并记录数据。 圆的是节点,方的是话题。 1.robot_camera.launch robot:~$ roslaunch robot_vision robot_camera.launch ... logging to /home/jym/.ros/log/bff715b6-9201-11ec-b271-ac8247315e93/roslaunch-robot-8830.log Check…

ROS+雷达 运行数据记录

先测试一下雷达,记录数据。方便接下来分析源码。 1.roslaunch robot_navigation lidar.launch robot:~$ roslaunch robot_navigation lidar.launch ... logging to /home/jym/.ros/log/7136849a-92cc-11ec-acff-ac8247315e93/roslaunch-robot-9556.log Checking l…

ROS 找C++算法源码的方法

在gmapping的launch文件中看到,type“slam_gmapping”,这里的slam_gmapping是c编译后的可执行文件。 如果想要修改gmapping算法,就需要找到slam_gmapping的c源码。 但是这是用apt下载的包,是二进制类型的,没有下载出…

ros 雷达 slam 导航 文件分析

ros 雷达 slam 导航 文件分析robot_slam_laser.launchrobot_lidar.launchlidar.launchraplidar.launchkarto.launchgmapping.launchcartographer.launchrobot_navigation.launchmap.yamlmap.pgmamcl_params.yamlmove_base.launchcostmap_common_params.yamllocal_costmap_param…

Apprentissage du français partie 1

Apprentissage du franais partie 1 键盘转换图: 字母:26个 元音字母:a、e、i、o、u、y b浊辅音(声带)-p清辅音 d-t 音符 音符:改变字母发音。 :闭音符 [e] :开音符 /ε/ :长音符 /ε/…

stm32基本定时器

定时器分类 stm32f1系列,8个定时器,基本定时器(TIM6,7)、通用定时器(TIM2,3,4,5)、高级定时器(TIM1,8)。 基本定时器:16位,只能向上计数的定时器,只能定时,没有外部IO 通用定时器:16位&#…

stm32高级定时器 基础知识

stm32高级定时器 高级定时器时基单元: 包含一个16位自动重装载寄存器 ARR 一个16位的计数器CNT,可向上/下计数 一个16位可编程预分频器PSC,预分频器时钟源有多种可选,有内部的时钟、外部时钟。 一个8位的重复计数器 RCR&…

stm32 PWM互补输出

stm32高级定时器例子—stm32 PWM互补输出 定时器初始化结构体 TIM_TimeBaseInitTypeDef 时基结构体,用于定时器基础参数设置,与TIM_TimeBaseInit函数配合使用,完成配置。 typedef struct { TIM_Prescaler /*定时器预分频器设置&…

stm32 输入捕获 测量脉宽

选用通用定时器TIM5的CH1。 PA0接一个按键,默认接GND,当按键按下时,IO口被拉高,此时,可利用定时器的输入捕获功能,测量按键按下的这段高电平的时间。 宏定义方便程序升级、移植,举个例子&#…

stm32 PWM输入捕获

普通的输入捕获,可使用定时器的四个通道,一路捕获占用一个捕获寄存器. PWM输入,只能使用两个通道,通道1和通道2。 一路PWM输入占用两个捕获寄存器,一个捕获周期,一个捕获占空比。 这里,用通用…

直流有刷减速电机结构及其工作原理

寒假无聊拆了个直流有刷减速电机。下面介绍一下它的结构和工作原理 直流电机 直流电机和直流减速电机: 构造上相差的是一个减速齿轮组。 普通的直流电机当空载时,电机的转速由电压决定,直流减速电机的转速由齿轮组和电压决定。 齿轮组作…

数据库基础概念

postgreSQL设置只允许本地机器连接 在D:\program files\PostgreSQL\14\data里面设置postgresql.conf: listen_addresses ‘localhost’ 然后在服务窗口重新启动postgresql。 PostgreSQL执行SQL语句 PostgreSQL的psql工具可通过命令行执行SQL语句。 psql -U po…

电机和驱动的种类

电机种类 直流电机 分为普通的直流电机、直流减速电机、有刷、无刷。 直流有刷减速电机参数: 空载转速,正常工作电压,电机不带任何负载的转速。 空载电流,正常工作电压,电机不带任何负载的工作电流。单位mA。 负载…

Linux shell基础知识

Shell简介 Shell是一个应用程序,接收用户输入的命令,根据命令做出相应动作。 Shell负责将应用层或者用户输入的命令,传递给系统内核。由操作系统内核,来完成相应的工作。然后将结果反馈给应用层或者用户。 shell命令格式&#…

Linux APT VIM 的一些指令

APT APT下载工具,可以实现软件自动下载、配置、安装二进制或源码功能。 APT采用客户端/服务器模式。 sudo apt-get update 更新软件 sudo apt-get check 检查依赖关系 sudo apt-get install package-name 安装软件 apt-get负责下载软件,install负责安…

CATIA 界面介绍

窗口介绍 窗口主要有:菜单栏、工具栏、特征树、罗盘、信息栏、图形区。 菜单栏,开始里面有CATIA的各个功能模块。 图形区,进行3D、2D设计的图形创建、编辑区域。 信息栏,显示用户即将进行操作的文字提示。 工具栏,…

Linux C文件编译

设置编辑器 1.TAB键设置为4空格。 首先用vim打开/etc/vim/vimrc文件,这里面发现root用户才能修改vimrc文件,所以用sudo命令暂时切换到root用户。 在vimrc文件最后面,输入set ts 4完成设置。 然后保存,关闭文件。 2.VIM编辑器显…

catia 草图设计

草图设计界面 进入草图编辑器环境: 菜单栏,文件-新建,然后类型选择Part。 工具栏,点击下面草图按钮。 然后选择草图平面。 然后就进入草图界面。 草图界面主要由菜单栏、工具栏、特征树、信息栏、罗盘、图形区组成。 菜单栏&…