完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1.1 波特率和数据格式
USART通信中的同步通信功能很少用到,大多情况下只采用异步通信,只能实现异步通信功能的接口就称之为UART。UART通信通常以字节为单位组成数据帧,由通信收发双方根据预先约定的波特率(传输速率)进行通信。 波特率表示每秒发送二进制数据位的速率,单位是bps,即位/秒,波特率越高,传输速度越快,常用的UART通信波特率有2400,4800,9600,115200等等。在进行串行通信之前,通信双方需要设置波特率保持一致,否则不能正常通信。 单片机标准串口进行通信时,没有数据传输时通信线路保持高电平状态。当要发送数据时,先发送一位0,用以表示开始发送,叫做起始位。然后再按照低位在前,高位在后的顺序发送8位数据。当8位数据发送完毕时,再发送一位1表示停止位。对于接收端而言,开始时传输线路一直保持高电平,一旦检测到低电平,便准备开始接收数据。当接收完8位数据时,便检测停止位,检测完毕后,表示一帧数据发送完毕,开始准备接受下一帧数据。为了确保数据准确性,通常会在数据位之后设置校验位。 串行通信的数据帧的格式由起始位、数据位、奇偶校验位(可选)和停止位等部分组成,如图5-1所示。 图5-1 串口数据发送格式示意图 1.2 TTL通信接口和RS232通信接口 电脑和单片机之间进行串口通信,通常使用USB转UART芯片,将USB通信协议转成UART协议和单片机通信,如图5-2所示,CH340的6脚和7脚接到USB口上的D-和D+,3脚和4脚接到STM32的UART接口引脚上。Kingst-32F1开发板上CH340的3脚和4脚通过跳线帽选择连接在STM32F103ZE单片机USART1的PA10和PA9引脚上。拔掉跳线帽USB转串口模块可以单独使用,注意连接外部串口时设备之间要共地。 图5-2 USB转串口电路 单片机的串口接口标准一般是TTL或者CMOS,而除此之外,UART通信还有一种RS232串行通信接口,台式电脑和早期的工业专用的笔记本电脑通常带RS232接口。 RS232标准是个反逻辑,也叫做负逻辑。为何叫负逻辑?它的TXD和RXD的电压,-3V~-15V代表是1,+3~+15V代表是0。低电平代表的是1,而高电平代表的是0,所以称之为负逻辑。9针RS232串口是不能和单片机直接连接的,需要用一个电平转换芯片MAX232或者SP3232来完成,这两个芯片只是设计公司不同,其他是完全兼容的,具体电路如图5-3所示。Kingst-32F1开发板中RS485和RS232共用USART2,使用时可以通过跳线帽选择。 图5-3 RS232转串口电路图 |
|
|
|
2 STM32 USART串口介绍
STM32F103ZE单片机内部集成有3(USART)+2(UART)个串行通信接口,如表5-1所示。 在使用异步通信时也就是相当于有5个UART模块,并且这5个模块能同时进行数据发送和接收,互不干扰。除此之外STM32的USART模块支持8位或9位长度的数据字;可配置1位或2位的停止位。 USART外设发送和接收的数据是通过数据寄存器(USART_DR)传输的。该寄存器兼具读和写的功能,实际上它是由发送数据寄存器(TDR)和接收数据寄存器(RDR)两个寄存器组成,就好比一个房间有两个门,一个只进不出,一个只出不进,如图5-4所示。 图5-4 USART数据发送和接收简易结构图 USART发送数据的大体流程:数据通过内部总线,先发送到TDR中,然后再由TDR移送到“发送移位寄存器”,最后数据通过移位从TXD引脚输出。当TDR中的数据传送到移位寄存器后,TDR为空,同时硬件会设置一个“发送数据寄存器空(TXE)”的标志位,此时可以把下一帧数据写入TDR中,而不必等到移位寄存器发送完所有位,向TDR中写入数据会清除TXE标志位。当一帧数据发送完成(停止位发送后)且TXE=1(TDR为空),即没有数据再写入到TDR时,硬件会设置一个“发送完成(TC)”标志位,表示最后一帧数据发送完毕,USART发送过程标志位状态如图5-5所示。如果设置了TXEIE(TXE中断使能位)或TCIE(TC中断使能位),当TXE或TC标志位被置位时,程序会执行串口中断服务函数。需要注意的是当USART发送功能(TE位)激活后(初始化或复位时),将发送一个空闲帧(0xFF),如果此时没有数据发送,则TXE标志位和TC标志位会一直处于“置位”状态,如果使能了TXEIE或TCIE,程序会重复执行串口中断服务函数,这将会大量占用CPU资源。 在使用串口中断发送数据时,只要TDR寄存器为空,就可以写入数据,而不需要等待数据发送完成,因此通常选择检测TXE标志位,而不是TC标志位。由于TDR寄存器一旦为空,TXE标志位会硬件置位,进而触发中断,所以当不发送数据时要及时关闭发送中断。 图 5-5 USART发送数据过程状态图 USART接收数据的流程要比发送数据简单很多。数据的最低有效位首先从RXD引脚移入到“接收移位寄存器”,当一帧数据接收完成,接收移位寄存器将数据发送到接收数据寄存器(RDR)中。此时硬件会设置一个接收数据寄存器非空标志位(RXNE),表示数据已经被接收并且可以读出,如果设置了接收中断,当检测到RXNE标志位时会执行中断服务函数。读取接收数据寄存器(RDR)中的数据可以自动清除RXNE标志位。RXNE标志位在下一字符接收前也可以手动清除,避免溢出错误。 |
|
|
|
配置流程
USART中配置流程并不复杂,只需要按照要求设置相应参数即可。在配置时要分清USART标志位和USART中断标志位,具体流程如下: (1) 使能USART时钟及配置相关引脚:在使能USART时钟时,注意STM32F103ZE单片机的USART1模块位于APB2总线上,USART2、USART3、UART4、UART5位于APB1总线上。USART双向通信时至少需要TXD和RXD两个引脚,其中TXD引脚配置为复用推挽输出模式,RXD引脚配置为浮空输入模式。 (2) USART外设初始化参数设置:初始化时要设置USART的波特率、数据长度、停止位、是否使用校验位、使能USART的发送功能和接收功能,一旦激活发送功能,USART会发送一个空闲帧,最后使用USART_Init初始化函数进行初始化。 (3) USART中断优先级设置:通过NVIC_Init函数配置串口中断优先级。 (4) 使能USART中断: 通过USART_ITConfig函数使能串口发送中断和串口接收中断。注意在此只使能串口接收中断,发送中断必须在发送前使能,发送完毕后关闭,否则程序会重复执行中断服务函数。 (5) 使能USART外设:通过USART_Cmd函数使能USART外设,一旦使能,USART便开始工作。 (6) 编写USART中断服务函数:串口中断服务函数需要使用中断向量表中定义的函数名称,具体如表5-2所示,中断服务函数依旧是保存在stm32f10x_it.c文件中。 |
|
|
|
初始化参数
USART初始化结构体的成员,包括波特率、数据长度、停止位数、校验位、模式设置、硬件控制流设置。在对USART初始化结构体成员设置参数时参考表5-3 USART初始化结构体参数设置列表。 |
|
|
|
USART中断设置
USART_ITConfig函数是使能或者失能USART模块的中断,函数原型如下:void USART_ITConfig(USART_TypeDef* USARTx, u16 USART_IT, Functional StateNewState),待使能或者失能的 USART 中断源如表5-4所示。USART发送数据时分为查询方式和中断方式,因查询方式会较长时间的占用CPU,可能耽误对其它事件的响应处理,因此实际项目开发中一般采用中断方式发送和接收数据,本章就以中断方式为例来配置USART。初始化时先使能“接收中断(USART_IT_RXNE)”,而“发送中断(USART_IT_TXE)”即用即开,用完关闭。 采用中断方式发送数据和接收数据时,当程序进入中断服务后需要判断到来的是哪个中断源,然后执行相应的函数。因此需要使用中断标志位检测函数USART_GetITStatus(USART_TypeDef* USARTx, u16 USART_IT)检测USART相应中断标志的状态,比如:USART_GetITStatus (USART1, USART_IT_TXE)表示获取发送中断标志位状态,其他中断标志位可以参考表5-5。 当检测到相应中断标志为后,有些硬件会自动清除相应标志位,而硬件不能自动清除时往往需要手动清除,此时可以使用USART_ClearITPendingBit(USART_TypeDef* USARTx, u16 USART_IT)中断标志位清除函数,清除相应标志位。中断标志位清除函数和中断标志位检测函数使用相同的USART中断标志位参数,如表5-5所示。比如清除“发送数据寄存器空(TXE)”标志位代码如下:USART_ClearITPendingBit(USART_IT_TXE); |
|
|
|
USART通信实例
单片机串口主要用于单片机与电脑以及单片机之间进行信息交互。通过前面几节,基本了解了STM32串口的基本状况和配置流程,接下来就是用USART1做一个简单的串口收发实验,实现串口助手发送单个字符到Kingst32-F1开发板,Kingst32-F1开发板收到字符后,对字符进行加1,然后重新发回到串口助手,并通过数码管显示该字符的十六进制数。首先还是先建立usart.c和usart.h驱动文件,根据前几节所讲的配置流程,编写USART驱动函数,具体代码如下: |
|
|
|
只有小组成员才能发言,加入小组>>
798 浏览 1 评论
999 浏览 1 评论
12431 浏览 0 评论
5882 浏览 3 评论
17674 浏览 6 评论
996浏览 1评论
971浏览 1评论
801浏览 1评论
3837浏览 1评论
999浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 02:25 , Processed in 1.118448 second(s), Total 90, Slave 71 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号