《USART模块》PPT课件.pptx_第1页
《USART模块》PPT课件.pptx_第2页
《USART模块》PPT课件.pptx_第3页
《USART模块》PPT课件.pptx_第4页
《USART模块》PPT课件.pptx_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

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

文档简介

第7章USART模块,微处理器与外设交换数据的过程可选择以下两种方式: 并行通信:数据的各个数位同时传送。 串行通信:数据按照位的顺序一位一位传 送。,第7章USART模块,与并行通信相比,串行通信的优点 (1)成本大大降低 (2)易于实现远距离通信 (3)工作频率可以更高,可以实现非常高速率的数据传输 (4)一般支持简单的数据传输协议或规范,支持数据确认机制。,第7章USART模块 在串行通信中数据在两个站之间进行传送的。 按照数据传送方向,串行通信可以分为单工、半双工和全双工三种制式。 在单工制式下数据只能从发送站向接收站传送。 在半双工制式下数据能双向传送,但是不能同时在两个方向上传送数据。 在全双工制式下,接收数据和发送数据占用不同的线路,全双工通信可以同时发送和接收。,几种常用的通信协议,同步通信方式要求通信双方以相同的时钟频率进行,而且准确协调,通过共享一个单个时钟或定时脉冲源保证发送方和接收方的准确同步,效率较高; 异步通信方式不要求双方同步,收发方可采用各自的时钟源,双方遵循异步的通信协议,以字符为数据传输单位,发送方传送字符的时间间隔不确定,发送效率比同步传送效率低。,第7章USART模块 串行通信标准有许多,下面对部分席见的串行通信进行简单介绍。,1.1、RS232串行通信接口的特性 在TxD和RxD上:逻辑1(MARK) =-5V-15V 逻辑0(SPACE)=+515V 允许的最大传输速率为38.4kb/s或更高;最长可驱动电缆25m。 机械特性: RS232标准采用的接口是9芯或25芯的D型插头,常用的一般是9针插头(DB-9),1.2 RS232串行通信接口定义,1.2 RS232串行通信接口定义,1.2 RS232串行通信接口定义 RS-232C规标准接口有25条线,常用的只有9根,它们是: (1)数据装置准备好(Data set ready-DSR)有效时(ON)状态,表明通信装置处于可以使用的状态。 (2)数据终端准备好(Data set ready-DTR)有效时(ON)状态,表明数据终端可以使用。 (3)请求发送(Request to send-RTS)用来表示DTE请求DCE发送数据,即当终端要发送数据时,使该信号有效(ON状态),向MODEM请求发送。它用来控制MODEM是否要进入发送状态。,(4)允许发送(Clear to send-CTS)用来表示DCE准备好接收DTE发来的数据,是对请求发送信号RTS的响应信号。当MODEM已准备好接收终端传来的数据,并向前发送时,使该信号有效,通知终端开始沿发送数据线TxD发送数据。 (5)接收线信号检出(Received Line detection-RLSD)用来表示DCE已接通通信链路,告知DTE准备接收数据。当本地的MODEM收到由通信链路另一端(远地)的MODEM送来的载波信号时,使RLSD信号有效,通知终端准备接收,并且由MODEM将接收下来的载波信号解调成数字两数据后,沿接收数据线RxD送到终端。此线也叫做数据载波检出(Data Carrier dectection-DCD)线。,(6)振铃指示(Ringing-RI)当MODEM收到交换台送来的振铃呼叫信号时,使该信号有效(ON状态),通知终端,已被呼叫。 (7)发送数据(Transmitted data-TxD)通过TxD终端将串行数据发送到MODEM,(DTEDCE)。 (8)接收数据(Received data-RxD)通过RxD线终端接收从MODEM发来的串行数据,(DCEDTE)。 (9)地线-GND。,2 RS232串行通信接口的应用 2.1 采用RS232进行计算机通信 串口通信接线方法:两个不同串口(不论是同一台计算机的两个串口或分别是不同计算机的串口),串口传输数据只要有接收数据针脚和发送针脚就能实现,即同一个串口的接收脚和发送脚直接用线相连,不同串口的接收端和发送端相连即可实现通信。,RS232接口定义,最简单的RS232接口连接,7.2.3流控和握手 流量控制:P262 握手协议:P262 7.2.4分帧和组帧 7.2.3错误检测和CRC 校验,7.2.6 RS485,RS-485总线,在要求通信距离为几十米到上千米时,广泛采用RS-485 串行总线标准。RS-485采用平衡发送和差分接收,因此具有抑制共模干扰的能力。 RS-485采用半双工工作方式,任何时候只能有一点处于发送状态,因此,发送电路须由使能信号加以控制,串口的如何工作的,一般有两种方式:查询和中断。 (1)查询:串口程序不断地循环查询,看看当前有没有数据要它传送。如果有,就帮助传送(可以从PC到STM32板子,也可以从STM32板子到PC)。 (2)中断:平时串口只要打开中断即可。如果发现有一个中断来,则意味着要它帮助传输数据它就马上进行数据的传送。同样,可以从 PC到STM3板子,也可以从STM32板子到PC。,第7章USART模块,7.1 USART介绍 单线通信,也支持LIN(局部互连网),智通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。USART利用分数波特率发生器提供宽范围的波特率选择。 它支持同步单向通信和半双工单线通信、智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。 使用多缓冲器配置的DMA方式,可以实现高速数据通信。,7.2 USART主要特性 全双工的,异步通信 NRZ标准格式 分数波特率发生器系统 发送和接收共用的可编程波特率,最高达4.5Mbits/s 可编程数据字长度(8位或9位) 可配置的停止位-支持1或2个停止位 LIN主发送同步断开符的能力以及LIN从检测断开符的能力 当USART硬件配置成LIN时,生成13位断开符;检测10/11位断开符,7.2 USART主要特性 发送方为同步传输提供时钟 IRDA SIR 编码器解码器 在正常模式下支持3/16位的持续时间 智能卡模拟功能 智能卡接口支持ISO7816-3标准里定义的异步智能卡协议 智能卡用到的0.5和1.5个停止位,7.2 USART主要特性 单线半双工通信 可配置的使用DMA的多缓冲器通信 在SRAM里利用集中式DMA缓冲接收/发送字节 单独的发送器和接收器使能位 检测标志 接收缓冲器满 发送缓冲器空 传输结束标志 校验控制 发送校验位 对接收数据进行校验,7.2 USART主要特性 四个错误检测标志 溢出错误 噪音错误 帧错误 校验错误 多处理器通信 - 如果地址不匹配,则进入静默模式 从静默模式中唤醒(通过空闲总线检测或地址标志检测) 两种唤醒接收器的方式:地址位(MSB,第9位),总线空闲,7.2 USART主要特性 10个带标志的中断源 CTS改变 LIN断开符检测 发送数据寄存器空 发送完成 接收数据寄存器满 检测到总线为空闲 溢出错误 帧错误 噪音错误 校验错误,7.3USART功能概述,接口通过三个引脚与其他设备连接在一起。任何USART双向通信至少需要两个脚:接收数据输入(RX)和发送数据输出(TX)。 RX:接收数据串行输入。通过过采样技术来区别数据和噪音,从而恢复数据。 TX:发送数据输出。当发送器被禁止时,输出引脚恢复到它的I/O端口配置。当发送器被激活,并且不发送数据时,TX引脚处于高电平。在单线和智能卡模式里,此I/O口被同时用于数据的发送和接收。,在同步模式中需要下列引脚: CK:发送器时钟输出。此引脚输出用于同步传输的 时钟, (在Start位和Stop位上没有时钟脉冲,软件可选地,可以在最后一个数据位送出一个时钟脉冲)。数据可以在RX上同步被接收。这可以用来控制带有移位寄存器的外部设备(例如LCD驱动器)。时钟相位和极性都是软件可编程的。在智能卡模式里,CK可以为智能卡提供时钟。 在IrDA模式里需要下列引脚: IrDA_RDI: IrDA模式下的数据输入。 IrDA_TDO: IrDA模式下的数据输出。 下列引脚在硬件流控模式中需要: nCTS: 清除发送,若是高电平,在当前数据传输结束时阻断下一次的数据发送。 nRTS: 发送请求,若是低电平,表明USART准备好接收数据,7.3.1 USART 特性描述,Stm32 USART框图,参考手册,7.3.1 USART 特性描述,7.3.2 单字节传输 1.在起始位期间,TX脚处于低电平,在停止位期间处于高电平。 空闲符号被视为完全由1组成的一个完整的数据帧,后面跟着包含了数据的下一帧的开始位(1的位数也包括了停止位的位数)。 断开符号 被视为在一个帧周期内全部收到0(包括停止位期间,也是0)。在断开帧结束时,发送器再插入1或2个停止位(1)来应答起始位。 2.字长可以通过编程USART_CR1寄存器中的M位,选择成8或9位。 3.奇偶校验位(9位包含) 4.停止位( 0.5,1,1.5,2个) 5.波特率设置 发送和接收由一共用的波特率发生器驱动,当发送器和接收器的使能位分别置位时,分别为其产生时钟。,7.3.2 单字节传输 9位字长,7.3.2 单字节传输 8位字长,与传输有关的状态位主要有,状态寄存器USART_SR TXE TC RXNZ 数据寄存器USART_DR 控制寄存器 详见手册,7.3.3分数波特率的产生,分数波特率的产生 接收器和发送器的波特率在USARTDIV的整数和小数寄存器中的值应设置成相同。 Tx / Rx 波特 这里的fCK是给外设的时钟(PCLK1用于USART2、3、4、5,PCLK2用于USART1) USARTDIV是一个无符号的定点数。这12位的值设置在USART_BRR寄存器。 注: 在写入USART_BRR之后,波特率计数器会被波特率寄存器的新值替换。因此,不要在通信进行中改变波特率寄存器的数值。 如何从USART_BRR寄存器值得到USARTDIV,7.3.4硬件流控制,利用nCTS输入和nRTS输出可以控制2个设备间的串行数据流。下图表明在这个模式里如何连接2个设备。,7.3.4硬件流控制,图7-8 RTS流控,7.3.4硬件流控制,图7-8 CTS流控,7.3.5发送器 发送器根据M位的状态发送8位或9位的数据字。当发送使能位(TE)被设置时,发送移位寄存器中的数据在TX脚上输出,相应的时钟脉冲在CK脚上输出。 字符发送 在USART发送期间,在TX引脚上首先移出数据的最低有效位。在此模式里,USART_DR寄存器包含了一个内部总线和发送移位寄存器之间的缓冲器(见图248)。 每个字符之前都有一个低电平的起始位;之后跟着的停止位,其数目可配置。 USART支持多种停止位的配置:0.5、1、1.5和2个停止位,7.3.5 发送器 可配置的停止位 随每个字符发送的停止位的位数可以通过控制寄存器2的位13、12进行编程。 1. 1个停止位:停止位位数的默认值。 2. 2个停止位:可用于常规USART模式、单线模式以及调制解调器模式。 3. 0.5个停止位:在智能卡模式下接收数据时使用。 4. 1.5个停止位:在智能卡模式下发送和接收数据时使用。 空闲帧包括了停止位。 断开帧是10位低电平,后跟停止位(当m=0时);或者11位低电平,后跟停止位(m=1时)。不可能传输更长的断开帧(长度大于10或者11位)。,8字长,配置步骤: 1. 通过在USART_CR1寄存器上置位UE位来激活USART 2. 编程USART_CR1的M位来定义字长。 3. 在USART_CR2中编程停止位的位数。 4. 如果采用多缓冲器通信,配置USART_CR3中的DMA使能位(DMAT)。按多缓冲器通信中的描述配置DMA寄存器。 5. 利用USART_BRR寄存器选择要求的波特率。 6. 设置USART_CR1中的TE位,发送一个空闲帧作为第一次数据发送。 7. 把要发送的数据写进USART_DR寄存器(此动作清除TXE位)。在只有一个缓冲器的情况下,对每个待发送的数据重复步骤7。 8. 在USART_DR寄存器中写入最后一个数据字后,要等待TC=1,它表示最后一个数据帧的传输结束。当需要关闭USART或需要进入停机模式之前,需要确认传输结束,避免破坏最后一次传输。,7.3.6接收器 USART可以根据USART_CR1的M位接收8位或9位的数据字。 在USART接收期间,数据的最低有效位首先从RX脚移进。在此模式里, USART_DR寄存器包含的缓冲器位于内部总线和接收移位寄存器之间。,配置步骤: 1. 将USART_CR1寄存器的UE置1来激活USART。 2. 编程USART_CR1的M位定义字长 3. 在USART_CR2中编写停止位的个数 4. 如果需多缓冲器通信,选择USART_CR3中的DMA使能位(DMAR)。按多缓冲器通信所要求的配置DMA寄存器。 5. 利用波特率寄存器USART_BRR选择希望的波特率。 6. 设置USART_CR1的RE位。激活接收器,使它开始寻找起始位。,USART库函数的使用,USART库函数的使用,串口应用的 编程流程,(1)RCC配置; 在RCC配置中,我们除了常规的时钟设置以外,要记得打开USART相对应的IO口时钟,USART时钟,还有管脚功能复用时钟 (2)GPIO配置; 在GPIO配置中,将发送端的管脚配置为复用推挽输出,将接收端的管脚配置为浮空输入 (3) USART配置; 在USART的配置中,通过USART_InitTypeDef结构体对USART进行初始化操作, (4)NVIC配置; 在NVIC的配置中,主要是USART1_IRQChannel的配置,和以前的讲述的中断配置类似。,(5) 发送/接收数据。 全部配置好之后就可以开始发送/接收数据了。发送数据用USART_SendData()函数,接收数据用USART_ReceiveData()函数。具体的函数功能可以参考固件库的参考文件。根据USART的配置,在发送和接收时,都是采用的8bits一帧来进行的,因此,在发送的时候,先开辟一个缓存区,将需要发送的数据送入缓存区,然后再将缓存区中的数据发送出去,在接收的时候,同样也是先接收到缓存区中,然后再进行相应的操作。,串口应用的 编程流程,串口常用函数介绍,与串口基本配置直接相关的几个固件库函数。这些函数和定义主要分布在 stm32f10x_usart.h 和 stm32f10x_usart.c 文件中。 1.串口时钟使能。串口是挂载在 APB2 下面的外设,所以使能函数为: RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1); 2.串口复位。当外设出现异常的时候可以通过复位设置, 实现该外设的复位,然后重新配置这个外设达到让其重新工作的目的。一般在系统刚开始配置外设的时候,都会先执行复位该外设的操作。复位的是在函数 USART_DeInit()中完成: void USART_DeInit(USART_TypeDef* USARTx);/串口复位 比如我们要复位串口 1,方法为: USART_DeInit(USART1); /复位串口 1,3.串口参数初始化。串口初始化是通过 USART_Init()函数实现的, void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct); 这个函数的第一个入口参数是指定初始化的串口标号,这里选择 USART1。 第二个入口参数是一个 USART_InitTypeDef 类型的结构体指针,这个结构体指针的成员变量用来设置串口的一些参数。,USART_InitStructure.USART_BaudRate = bound; /一般设置为 9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b;/字长为 8 位数据格式 USART_InitStructure.USART_StopBits = USART_StopBits_1; /一个停止位 USART_InitStructure.USART_Parity = USART_Parity_No; /无奇偶校验位 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; /无硬件数据流控制 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; /收发模式 USART_Init(USART1, ,4.数据发送与接收。STM32 的发送与接收是通过数据寄存器 USART_DR 来实现的,这是一个双寄存器,包含了 TDR 和 RDR。当向该寄存器写数据的时候,串口就会自动发送,当收到数据的时候,也是存在该寄存器内。 STM32 库函数操作 USART_DR 寄存器发送数据的函数是: void USART_SendData(USART_TypeDef* USARTx, uint16_t Data); 通过该函数向串口寄存器 USART_DR 写入一个数据。 STM32 库函数操作 USART_DR 寄存器读取串口接收到的数据的函数是: uint16_t USART_ReceiveData(USART_TypeDef* USARTx); 通过该函数可以读取串口接受到的数据。,在固件库函数里面,读取串口状态的函数是: FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG); 这个函数的第二个入口参数非常关键,它是标示我们要查看串口的哪种状态,比如RXNE(读数据寄存器非空)以及 TC(发送完成)。例如我们要判断读寄存器是否非空(RXNE),操作库函数的方法是: USART_GetFlagStatus(USART1, USART_FLAG_RXNE); 我们要判断发送是否完成(TC),操作库函数的方法是: USART_GetFlagStatus(USART1, USART_FLAG_TC);,6.串口使能。串口使能是通过函数 USART_Cmd()来实现的,这个很容易理解,使用方法是:USART_Cmd(USART1, ENABLE);,7.开启串口响应中断。(需要中断时才开) 有些时候当我们还需要开启串口中断,那么我们还需要使能串口中断,使能串口中断的函数是: void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState) 这个函数的第二个入口参数是标示使能串口的类型,也就是使能哪种中断,因为串口的中断类型有很多种。 比如在接收到数据的时候(RXNE 读数据寄存器非空),我们要产生中断,那么我们开启中断的方法是: USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);/开启中断,接收到数据中断 我们在发送数据结束的时候(TC,发送完成)要产生中断,那么方法是: USART_ITConfig(USART1,USART_IT_TC,ENABLE);,8.获取相应中断状态。当我们使能了某个中断的时候,当该中断发生了,就会设置状态寄存器中的某个标志位。 经常我们在中断处理函数中,要判断该中断是哪种中断,使用的函数是: ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT) 比如我们使能了串口发送完成中断,那么当中断发生了, 我们便可以在中断处理函数中调用这个函数来判断到底是否是串口发送完成中断,方法是: USART_GetITStatus(USART1, USART_IT_TC) 返回值是 SET,说明是串口发送完成中断发生。,初始化串口,1、要声明一个结构:GPIO_InitTypeDefGPIO_InitStructure; 这里顺便也声明了GPIO的结构。因为串口是需要使用IO口来进行发送和接收的。,2、设置该结构中的成员:串口的结构成员设置如下: USART_StructInit( /无奇偶校验,USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;/无流控制 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;/打开Rx接收和Tx发送功能,2019/4/13,3、调用函数xxx_Init()来初始化外设(包括IO和USART): USART_Init(USART1, /初始化,4、调用xxx_Cmd(xxx,ENABLE);函数来使能外设。 USART_Cmd(USART1, ENABLE); /启动串口 因使用的是中断方式来触发串口收发数据,我们在使能串口之前,也把发送和接收的中断使能打开:,5、加上外设的时钟使能 RCC中打开相应串口 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 , ENABLE); 因要用到GPIO,它和USART都在APB2上。因此我们调用的函数又如下:,操作串口收发数据,固件库的函数如何让串口发送和接收数据呢?它给我们提供了两个函数: USART_SendData();省略函数参数 USART_ReceiveData();,注意在对数据进行发送和接收的时候,要检查USART的状态,只有才能进行下一帧数据的发送或接收等到数据发送或接收

温馨提示

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

评论

0/150

提交评论