STM32学习笔记-STM32串口小结_第1页
STM32学习笔记-STM32串口小结_第2页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 STM32学习笔记-STM32串结.简要介绍*串通信*般是以帧格式传输数据,即是帧帧的传输,每帧包含有起始信号、数据信息、停信息,可能还有校验信息。USART 就是对这些传输参数有具体规定,当然也不是只有唯个参数值,很多参数值都可以定义设置,只是增强它的兼容性。USART 满外部设备对业标准 NRZ 异步串数据格式的要求,并且使了数波特率发器,可以提供多种波特率,使得它的应更加泛。USART 持同步单向通信和半双单线通信;还持局域互连络 LIN、智能卡(SmartCard)协议与 lrDA(红外线数据协会) SIR ENDEC规范。USART 持使 DMA,可实现速数据通信,有关 DMA 具

2、体应将在 DMA 章节作具体讲解。USART 在 STM32 应最多莫过于“打印”程序信息,般在硬件设计时都会预留个 USART 通信接连接电脑,于在调试程序是可以把些调试信息“打印”在电脑端的串调试助具上,从了解程序运是否正确、如果出错哪具体哪出错等等1.根据数据通讯的向,通讯分为全双、半双及单通讯2.根据通讯的数据同步式,分为同步和异步两种,可以根据通讯过程中是否有使到时钟信号进简单的区分。在同步通讯中,收发设备双会使根信号线表时钟信号,在时钟信号的驱动下双进协调,同步数据,见图 20-3。通讯中通常双会统规定在时钟信号的上升沿或下降沿对数据线进采样 在异步通讯中,不使时钟信号进数据同步,

3、它们直接在数据信号中穿插些同步的信号位,或者把主体数据进打包,以数据帧的格式传输数据,见图 20-4,某些通讯中还需要双约定数据的传输速率,以便更好地同步在同步通讯中,数据信号所传输的内容绝部分就是有效数据,异步通讯中会包含有帧的各种标识符,所以同步通讯的效率更,但是同步通讯双的时钟允许误差较,异步通讯双的时钟允许误差较。总结:*处理器与外部通讯*主要可分别为以下两种式:1.并通信:数据多位同时传输,通讯速度快,但占IO资源多2.串通信:数据单位顺序传输,通讯速度较慢,其占IO资源较少。*串通信按数据传递向*可分为下种类型:1.单:传输数据只能单向传递2.半双:传输数据可以进双向传输,但在传输

4、数据的瞬间,数据为单向传输,实际上是种可变向的单通信3.全双:传输数据进双向传输过程,此类通信式要求通信设备都具有独的接收和发送数据能。*串通信按通信式*可分为1.同步通信,2.异步通信1.同步通信:从硬件结构上讲,其通讯接有:如:SPI,IIC通信接。1.SDA:数据线,发送和接受户所需求的数据。2.SCL两个接: 时钟线,提供数据接受时序,保证数据正常传递;2.异步通信:与同步通信上对,没有时钟线:SCL,使波特率等协议来确保数据传输速率。通讯接为:RXD、TXD分别负责数据的接收和发送。串通讯串通讯收发双设备就需要符合串通讯协议的物理规定也就是串的机械电特性,同时接受发送时也要符合规定通

5、讯逻辑,统收发双的数据打包、解包标准。也就是要统收发双的物理层与协议层。物理层1、RS232标准RS232标准串通信 1.如果两个通讯设备之间使的是RS232串通讯协议标准,那么MCU出来的TTL电平信号先经过个TTL转RS232电平转换芯,然后经过个DB9接与外部设备进连接(RS232串通讯标准COM俗称DB9接),再经过个电平转换芯转换成CPU可以识别的TTL电平信号来实现通讯。2.为什么要使电平转换芯呢?是因为TTL电平与RS232电平不兼容,RS232接任何条信号线的电压均为负逻辑关系,即RS232因为其抗扰能强般于业通信TTL当通讯距离于40cm时,传输数据就会收到扰。控制器般使 T

6、TL 电平标准,所以常常会使 MA3232 芯对 TTL 及 RS-232 电平的信号进互相转换DB9标准的公头与母头的接法如下图所 串线中的 RTS、 CTS、 DSR、 DTR 及 DCD 信号,使逻辑 1 表信号有效,逻辑 0 表信号效。例如,当计算机端控制 DTR 信号线表为逻辑 1 时,它是为了告知远端的调制调解器,本机已准备好接收数据, 0 则表还没准备就绪。在前的其它业控制使的串通讯中,般只使 RXD、 TXD 以及 GND 三条信号线,直接传输数据信号, RTS、 CTS、DSR、 DTR 及 DCD 信号都被裁剪掉了协议层串通讯的数据包由发送设备通过的 TXD 接传输到接收设

7、备的 RXD 接。在串通讯的协议层中,规定了数据包的内容,它由启始位、主体数据、校验位以及停位组成,通讯双的数据包格式要约定致才能正常收发数据,其组成见图串数据包的基本组成串异步通讯,异步通讯中由于没有时钟信号 (如前讲解的 DB9 接中是没有时钟信号的),所以两个通讯设备之间需要约定好波特率,即每个码元的长度,以便对信号进解码,图串数据包的基本组成 中虚线分开的每格就是代表个码元。常见的波特率为 4800、9600、 115200 等。起始位: 由1个逻辑 0 的数据位表结束位: 由 0.5、 1、 1.5 戒 2 个逻辑 1 的数据位表有效数据 :在起始位后紧接着的就是有效数据,有效数据的

8、长度常被约定为 5、 6、 7 或8 位长。校验位:有效数据之后,有个可选的数据校验位。由于数据通信相对更容易受到外部扰导致传输数据出现偏差,可以在传输过程加上校验位来解决这个问题。校验法有奇校验(odd)、偶校验(even)、0校验(space)、1校验(mark)以及校验(noparity),它们介绍如下:奇校验:奇校验要求有效数据和校验位中“1”的个数为奇数,如个 8 位长的有效数据为:01101001,此时总共有 4 个“1”,为达到奇校验效果,校验位为“1”,最后传输的数据将是 8位的有效数据加上 1位的校验位总共 9位。偶校验:偶校验与奇校验要求刚好相反,要求帧数据和校验位中“1”

9、的个数为偶数,如数据帧:11001010,此时数据帧“1”的个数为 4个, 所以偶校验位为“0”。0校验:0 校验是不管有效数据中的内容是什么,校验位总为“0”。1 校验:1校验是不管数据中内容为什么校验位总为1 。校验:没有校验位。要想实现串通信协议1、配置好物理层2、统规定收发双波特率、起始位、数据帧、校验位和停位。通信参考案列:USART与UART的区别*USART*(Universal Synchronous Asynchronous Receiver and Transmitter)通同步异步收发器是个串通信设备,可以灵活地与外部设备进全双数据交换。*UART*(Universal

10、Asynchronous Receiver and Transmitter),它是在 USART 基础上裁剪掉了同步通信功能,只有异步通信。简单区分同步和异步就是看通信时需不需要对外提供时钟输出,我们平时的串通信基本都是 UART,它还是种通的数据通信议。区别:USART是指单机的个端模块,可以根据需要配置成同步模式(SPI,I2C),也可以将其配置为异步模式,后者就是UART。所以说UART姑且可以称之为个与SPI,I2C对等的“协议”,USART则不是个协议,是更应该理解为个实体。相于同步通讯,UART不需要统的时钟线,接线更加便。但是,为了正常的对信号进解码,使UART通讯的双必须事先约

11、定好波特率,即单位事件内传输码元的个数。我们平时的串通信基本都是UARTUSART 满外部设备对业标准 NRZ异步串数据格式的要求,并且使了数波特率发器,可以提供多种波特率,使得它的应更加泛。USART 持同步单向通信和半双单线通信;还持局域互连络 LIN、智能卡(SmartCard)协议与 lrDA(红外线数据协会) SIR ENDEC规范。USART 在 STM32应最多莫过于“打印”程序信息,般在硬件设计时都会预留个 USART 通信接连接电脑,于在调试程序是可以把些调试信息 “打印”在电脑端的串调试助具上,从了解程序运是否正确、指出运出错位置等等。UART特点全双异步通信;分数波特率发

12、器系统,提供精确的波特率。发送和接受共的可编程波特率,最可达4.5Mbits/s;可编程的数据字长度(8位或者9位);可配置的停位(持1或者2位停位);可配置的使DMA多缓冲器通信;单独的发送器和接收器使能位;检测标志: 接受缓冲器 发送缓冲器空 传输结束标志;多个带标志的中断源,触发中断;其 他:校验控制,四个错误检测标志。STM32的 USART 输出的是 TTL电平信号,若需要 RS-232标准的信号可使MAX3232芯进转换。 框图的上部分,数据从RX进到接收移位寄存器,后进到接收数据寄存器,最终供CPU或者DMA来进读取;数据从CPU或者DMA传递过来,进发送数据寄存器,后进发送移位

13、寄存器,最终通过TX发送出去。然,UART的发送和接收都需要波特率来进控制的,波特率是怎样控制的呢?这就到了框图的下部分,在接收移位寄存器、发送移位寄存器都还有个进的箭头,分别连接到接收器控制、发送器控制。这两者连接的是接收器时钟、发送器时钟。也就是说,异步通信尽管没有时钟同步信号,但是在串内部,是提供了时钟信号来进控制的。接收器时钟和发送器时钟有是由什么控制的呢?可以看到,接收器时钟和发送器时钟被连接到同个控制单元,也就是说它们共个波特率发器。同时也可以看到接收器时钟(发器时钟)的计算法、USRRTDIV的计算法。这需要知道个知识点:UART1的时钟:PCLK2(速);UART2、UART3

14、、UART4的时钟:PCLK1(低速)。功能框图致分为4部分1、功能引脚TX:发送数据输出引脚。RX:接收数据输引脚。SW_RX:数据接收引脚,只于单线和智能卡模式,属于内部引脚,没有具体外部引脚。 nRTS:请求以发送(Request To Send),n表低电平有效。如果使能 RTS 流控制,当USART 接收器准备好接收新数据时就会将nRTS 变成低电平;当接收寄存器已满时,nRTS 将被设置为电平。该引脚只适于硬件流控制。也就是使硬件来控制数据的接收与发送。nCTS:清除以发送(Clear To Send),n 表低电平有效。如果使能 CTS 流控制,发送器在发送下帧数据之前会检测 n

15、CTS 引脚,如果为低电平,表可以发送数据,如果为电平则在发送完当前数据帧之后停发送。该引脚只适于硬件流控制。SCLK:发送器时钟输出引脚。这个引脚仅适于同步模式。2、数据寄存器(USART_DR) -收发原理USART 数据寄存器(USART_DR)只有低 9位有效,并且第 9 位数据是否有效要取决于USART 控制寄存器 1(USART_CR1)的 M 位设置,当 M 位为 0 时表 8位数据字长,当 M位为 1表 9位数据字长,我们般使 8位数据字长。USART_DR 包含了已发送的数据或者接收到的数据。USART_DR 实际是包含了两个寄存器,个专门于发送的可写 TDR,个专门于接收的

16、可读 RDR。当进发送操作时,往 USART_DR 写数据会动存储在 TDR内;当进读取操作时,向 USART_DR读取数据会动提取 RDR数据。TDR 和 RDR 都是介于系统总线和移位寄存器之间。串通信是个位个位传输的,发送时把 TDR 内容转移到发送移位寄存器,然后把移位寄存器数据每位发送出去,接收时把接收到的每位顺序保存在接收移位寄存器内然后才转移到 RDR。3、控制器-如何配置收发USART 有专门控制发送的发送器、控制接收的接收器,还有唤醒单元、中断控制等等。使 USART 之前需要向 USART_CR1寄存器的 UE 位置 1 使能 USART。发送或者接收数据字长可选 8位或

17、9位,由 USART_CR1的M 位控制。(1)发送器当 USART_CR1 寄存器的发送使能位 TE 置 1 时,启动数据发送,发送移位寄存器的数据会在 TX引脚输出,低位在前,位在后。如果是同步模式 SCLK 也输出时钟信号。个字符帧发送需要三个部分:起始位 + 数据帧 + 停位。起始位是个位周期的低电平,位周期就是每位占的时间;数据帧就是我们要发送的 8 位或 9 位数据,数据是从最低位开始传输的;停位是定时间周期的电平。停位时间长短是可以通过 USART 控制寄存器 2(USART_CR2) 的 STOP1:0 位控制,可选 0.5个、 1 个、 1.5 个和 2 个停位。默认使 1

18、个停位。2 个停位适于正常 USART 模式、单线模式和调制解调器模式。 0.5 个和 1.5 个停位于智能卡模式。当选择 8 位字长,使 1 个停位时,具体发送字符时序图见图字符发送时序图 。当发送使能位 TE 置 1 之后,发送器开始会先发送个空闲帧 (个数据帧长度的电平),接下来就可以往 USART_DR 寄存器写要发送的数据。在写最后个数据后,需要等待 USART 状态寄存器 (USART_SR) 的 TC 位为 1,表数据传输完成,如果 USART_CR1寄存器的 TCIE 位置1,将产中断。 在发送数据时,编程的时候有个较重要的标志位(2)接收器如果将 USART_CR1 寄存器的

19、 RE 位置 1,使能 USART 接收,使得接收器在 RX 线开始搜索起始位。在确定到起始位后就根据 RX 线电平状态把数据存放在接收移位寄存器内。接收完成后就把接收移位寄存器数据移到 RDR 内,并把 USART_SR 寄存器的 RXNE 位置 1,同时如果USART_CR2 寄存器的 RXNEIE置 1 的话可以产中断在接收数据时,编程的时候有个较重要的标志位4.数波特率成USART 的发送器和接收器使相同的波特率。计算公式如下:其中, fPLCK 为 USART 时钟, USARTDIV 是个存放在波特率寄存器 (USART_BRR) 的个符号定点数。其中 DIV_Mantissa11

20、:0 位定义 USARTDIV 的整数部分, DIV_Fraction3:0 位定义USARTDIV 的数部分。例如: DIV_Mantissa=24(0 x18), DIV_Fraction=10(0 x0A),此时 USART_BRR 值为 0 x18A;那么 USARTDIV 的数位10/16=0.625;整数位 24,最终 USARTDIV 的值为 24.625。如果知道 USARTDIV 值为 27.68,那么DIV_Fraction=16*0.68=10.88,最接近的正整数为 11,所以 DIV_Fraction3:0 为 0 xB; DIV_Mantissa= 整数 (27.6

21、8)=27,即为0 x1B。波特率的常值有 2400、 9600、 19200、 115200。下以实例讲解如何设定寄存器值得到波特率的值。我们知道 USART1 使 APB2 总线时钟,最可达 72MHz,其他 USART 的最频率为 36MHz。我们选取 USART1 作为实例讲解,即 fPLCK=72MHz。为得到 115200bps 的波特率,此时:解得 USARTDIV=39.0625,可算得 DIV_Fraction=0.0625*16=1=0 x01, DIV_Mantissa=39=0 x17,即应该设置 USART_BRR的值为 0 x171。补充:衡量通讯性能的个常重要的参

22、数就是通讯速率,通常以特率 (Bitrate) 来表,即每秒钟传输的进制位数,单位为特每秒(bit/s)。容易与特率混淆的概念是“波特率” (Baudrate),它表每秒钟传输了多少个码元。码元是通讯信号调制的概念,通讯中常时间间隔相同的符号来表个进制数字,这样的信号称为码元。如常见的通讯传输中, 0V 表数字 0, 5V 表数字 1,那么个码元可以表两种状态 0 和 1,所以个码元等于个进制特位,此时波特率的与特率致;如果在通讯传输中,有 0V、 2V、 4V 以及 6V 分别表进制数 00、01、 10、 11,那么每个码元可以表四种状态,即两个进制特位,所以码元数是进制特位数的半,这个时

23、候的波特率为特率的半。 因为很多常见的通讯中个码元都是表两种状态,们常常直接以波特率来表特率,虽然严格来说没什么错误,但希望您能了解它们的区别。在电通信领域,波特(Baud)即调制速率,指的是有效数据讯号调制载波的速率,即单位时间内载波调制状态变化的次数。它是对符号传输速率的种度量,1波特即指每秒传输1个符号,透过不同的调制式,可以在个码元符号上负载多个bit位信号。“波特”(Baud)本已是速率,所以不需要写成 Baud Rate(Rate 是赘字)。单位“波特”本就已经是代表每秒的调制数,以“波特每秒”(Baud per second)为单位是种常见的错误,但是在般中语化的沟通上还是常以“

24、波特率”来描述“波特”(Baud)。5.校验控制STM32F103系列控制器USART持奇偶校验。使校验位时,串传输的长度将在8位数据帧上加上1位的校验位,总共9位,此时USART_CR1寄存器的M位需要设置位1,即9数据位。将USART_CR1寄存器的PCE位置1就可以启动奇偶校验控制,奇偶校验由硬件动完成。启动了奇偶校验控制之后,发送数据帧时会动添加校验位,接收数据动验证校验位。接收数据时如果出现奇偶校验位验证失败,会将USART_SR寄存器的PE置1,并可以产奇偶校验中断。使了奇偶校验控制位后,每个字符帧的格式变成了:起始位+数据帧+校验位+停位。6.中断控制7.基于库函数的串初始化步骤

25、:对于串的初始化步骤可以分为以下步:1.GPIO以及串时钟的使能2.GPIO端复映射设置,如果想要使中断的化,则需要进NVIC中断优先级分组设置3.GPIO端模式初始化4.UART模式初始化设置5.串使能。如果不使串中断的话,使上配置已经就够了。若使串中断则需要加上中断配置。6.中断使能以及NVIC中断初始化配置例(初始化USART1):USART_Cmd函数的功能是使能或失能USART串外设。例:使能USART1USART_Cmd(USART1,ENABLE);USART_ITConfig函数的功能是使能或者失能指定的USART串中断。USART_IT_PE 奇偶错误中断USART_IT_T

26、XE 发送中断USART_IT_TC 传输完成中断USART_IT_RXNE 接收中断USART_IT_IDLE 空闲总线中断 USART_IT_LBD LIN中断检测中断USART_IT_CTS CTS中断USART_IT_ERR 错误中断例:使能USART1接收中断USART_Cmd(USART1,USART_IT_RXNE,ENABLE);USART_SendData函数的功能是通过外设USARTx发送单个数据。例:从USART3发送个字符0 x26USART_SendData(USART3,0X26);USART_ReceiveData函数的功能是返回USARTx最近接收到的数据。例:

27、从USART2读取接收到的数据u8 RxData;RxData = USART_ReceiveData(USART2);USAER_GetFlagStatus函数的功能是检查指定的USART标志位设置与否。USART_FLAG_CTS CTS标志位USART_FLAG_LBD LIN中断检测标志位USART_FLAG_TXE 发送数据寄存器空标志位USART_FLAG_TC 发送完成标志位USART_FLAG_RXNE 接收数据寄存器空标志位USART_FLAG_IDLE 空闲总线标志位USART_FLAG_ORE 溢出错误标志位USART_FLAG_NE 噪声错误标志位USART_FLAG_

28、FE 帧错误标志位USART_FLAG_PE 奇偶错误标志位例:检查USART1发送标志位的值FlagStatus Status;Status = USART_GetFlagStatus(USART1,USART_FLAG_TXE);USART_ClearFlag函数的功能是清除USARTx的待处理标志位。例:清除USART1的溢出错误标志位USART_ClearFlag(USART1,USART_FLAG_ORE);USART_GetITStatus函数的功能是检查指定的USART中断发与否。USART_IT_PE 奇偶错误中断USART_IT_TXE 发送中断USART_IT_TC 发送完成中断USART_IT_RXNE 接收中断 USART_IT_IDLE 空闲总线中断USART_IT_LBD LIN中断探测中断USART_IT_CTS CTS中断USART_IT_ORE 溢出错误中断USART_IT_NE 噪错误中断USART_IT_FE 帧错误中断例:检查USART1的中断类型ITStatus ErrorITstatus;ErrorITstatus = USART_GetITStatus(USART1,USART_IT_OverrunError);时序就是协议的实际化,它实质上是些列的脉冲信号,通信双将信息按照预先定好的规定

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论