首页 > 其他 > 详细

STM32F103ZET6串口通信

时间:2019-07-28 11:01:18      阅读:95      评论:0      收藏:0      [点我收藏+]

1、电平标准 

  根据通讯使用的电平标准不同,串口通讯可分为TTL标准和RS-232标准,如下表:

技术分享图片

  从图中可以看到,TTL电平标准使用5V表示高电平,使用0V表示低电平。在R232电平标准中,为了增加串口通讯的远距离传输及抗干扰能力,使用的是-15V表示高电平,使用+15V表示低电平。如下图为RS232TLL电平标准表示同一个信号时的对比。

 技术分享图片

  在电子电路中,一般使用TTL电平进行通讯,而在PC机中则使用RS232电平进行通讯。所以为了使电子设备可以和PC机进行串口通讯,必须对TTL电平和RS232电平的信号进行互相转换。

2、串口协议

  串口通讯的英文全称为Serial Communication,这是一种在设备间非常常用的串行通讯方式。

  串口通讯的协议,串口通讯的数据包由发送设备通过自身的TXD接口传输到接收设备的RXD接口。在串口通讯的协议中,规定了数据包的内容,该内容由起始位、数据位、校验位以及停止位组成,通讯双方的数据包格式要约定一致才能正常收发数据。格式如下图:

技术分享图片

  在数据帧格式中,校验位可以要也可以不要。

  一般在串口通信中,空闲状态下,IO口的电平为高电平。

3、串口波特率

  串口通讯一般使用的是异步通讯,异步通讯是没有时钟信号的,为了保证两个设备能够正常通讯,必须在两个设备间约定好收发的速率,波特率就是设备的收发速率,波特率表示的是单位时间内收发的bit位,即一个bit的收发时长。比如波特率为9600的设备,那么该设备1S的时间内可以收发9600个bit,发送一个bit的时长位1/9600≈104us。

4、数据帧的起始信号和停止信号  

  串口通讯的一个数据包是从起始信号开始的,直到停止信号结束。数据包的起始信号由一个逻辑0的数据位表示,而数据包的停止信号可由0.5、1、1.5或2个逻辑1的数据位表示。

  有效数据:

  在数据包的起始位之后紧接着的就是要传输的主体数据内容,也称为有效数据,有效数据的长度常被约定位5、6、7或8位。

  数据校验:

  在有效数据之后,有一个可选的数据校验位,由于数据通信相对更容易受到外部干扰导致传输数据出现偏差,可以在传输过程中加上校验位来解决这个问题,校验方法有奇校验、偶校验、0校验、1校验及无校验。

  奇校验要求有效数据和校验位中“1”的个数为奇数,比如一个8位长的有效数据位:01101001,此时总共有4个“1”,为达到奇校验的效果,校验位为“1”,最后传输的数据将是8位的有效数据加上1位的校验位总共9位。

  偶校验与奇校验要求刚好相反,要求有效数据和校验位中“1”的个数为偶数,比如数据帧:11001010,此时有效数据“1”的个数位4,所以偶校验位为“0”。

  0校验是不管有效数据中的内容是什么,校验位总为“0”。

  1校验是不管有效数据中的内容是什么,校验位总为“1”。

5、UART和USART的区别 

  UART是指通用异步收发器,UASRT是指通用同步/异步收发器。从名称上可是看出,USART是在UART基础上增加了同步功能,即USART是UART的增强型。

  STM32的USART一般做异步通信,即UART功能。

6、USART功能概述 

  使用USART双向通信至少需要三个脚:GND、RX、TX。

  RX:接收数据引脚,通过采样技术来区别数据和噪音,从而恢复数据。

  TX:发送数据引脚,当发送器被禁止时,输出引脚恢复到它的IO端口配置。当发送器被激活,并且不发送数据时,TX引脚处于高电平,也就是说USART的空闲状态的电平时高电平。这里需要注意一点的是,当与设备相连的时候,如果设备断电,这需要将发送器禁止,使TX口输出低电平,否者有可能引起IO口电流倒灌。

  TX脚位在单线和智能卡模式里被同时用于数据的发送和接收。

  USART总线在发送或接收前应处于空闲状态,即高电平。

  一个起始位,起始位为1。

  一个数据字,可以使8位数据或9位数据。发送或接收数据的时候,是先发送或接收低位数据。

  停止位可设置为0.5、1、1.5、2个停止位,发送或接收停止位说明数据帧发送或接收完成。

  使用分数波特率发生器,由12位整数和4位小数组成。

  一个状态寄存器USART_SR

  数据寄存器USART_DR

  一个波特率寄存器USART_BRR,12位表示波特率的整数,4位表示波特率的小数。

  一个智能卡模式下的保护时间寄存器USART_GTPR

   USART的框图如下:

技术分享图片

7、STM32的USART波特率配置 

  STM32的每个串口都有一个独立的波特率寄存器USART_BRR,该寄存器由USART分频器除法因子USARTDIV的整数部分和小数部分组成。bit4~bit15这12位组成了整数部分DIV_Mantissa,bit0~bit3这4个位组成了分数部分DIV_Fraction

  波特率的计数公式 = CLK/(16*USARTDIV)。 

  CLK是USART的时钟频率,USART2、USART3、USART4、USART5使用的是APB1总线时钟,一般是36MHZ(STM32F103系列);而USART1则使用的是APB2总线时钟,一般是72MHZ(STM32F103系列)。

  可以根据需要的波特率的值换算出USARTDIV的值。比如设置波特率为9600,则USARTDIV为:

    USARTDIV = CLK / (16 * 9600)

  如果CLK = 72MHZ,则:

  USARTDIV = 72000000/(16*9600) = 468.75

  将小数部分换算为16进制:

    DIV_Fraction = 0.75*16 = 12 = 0x0C

  将整数部分转为16进制:

    DIV_Mantissa = 468 = 0x1D4

  所以波特率寄存器USART_BRR的值为0x1D4C。

  设置波特率时的误差如下图:

技术分享图片

  注意不要在通信过程中改变波特率寄存器的值。

8、USART中断请求

  USART中断请求表:

  技术分享图片

  USART中断映像图:

技术分享图片

  从中断映像图中可以看出,USART的各种中断事件被连接到同一个中断向量,也就是说USART产生的中断都会进入到同一个中断服务函数内。

  各种中断事件:

  发送期间:发送完成、清除发送、发送数据。

  接收期间:空闲总线检测、溢出错误、接收数据寄存器非空、校验错误、LIN断开符号检测、噪音标志(仅在多缓冲器通信)和帧错误(仅在多缓冲器通信)。

  如果设置了对应的使能控制位,这些事件就可以产生各自的中断,可以在中断服务函数内通过判断状态寄存器的位来区分是哪个中断。

 

 

STM32F103ZET6串口通信

原文:https://www.cnblogs.com/h1019384803/p/11257812.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!