STM32F103ZET6 serial communication

1, the standard level 

  The different communication standards use levels, serial communication can be divided into TTL standards RS-232 standard, as follows:

  Can be seen from the figure, the TTL level using standard 5V indicates a high level, the use of 0V indicates a low level. In R232 level criteria, in order to increase the anti-jamming capability and long-distance transmission of serial communication, using -15V indicates a high level, the use of + 15V represents the low level. Pictured as RS232 and TLL level criteria expressed when comparing the same signal.

 

  In the electronic circuit, the TTL level is generally used for communication, and the communication using the RS232 level in the PC. So in order to make electronic devices may be serial communication and PC must be converted to another signal TTL level RS232 level.

2, serial protocols

  English full serial communication Serial Communication, which is a very popular device among serial communication.

  Serial communication protocol, the data packet transmitted by the serial communication device via its TXD interface transfer to the receiving device RXD interfaces. In the serial communication protocol, the provisions of the contents of the packet, the contents of the start bit, data bits, parity and stop bits, the two sides of the communication packet format to be agreed unanimously to properly send and receive data. FIG format:

  In the data frame format, the check bits may not be possible.

  In general serial communication in the idle state, the level of the IO port is high.

3, serial port baud rate

  串口通讯一般使用的是异步通讯,异步通讯是没有时钟信号的,为了保证两个设备能够正常通讯,必须在两个设备间约定好收发的速率,波特率就是设备的收发速率,波特率表示的是单位时间内收发的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断开符号检测、噪音标志(仅在多缓冲器通信)和帧错误(仅在多缓冲器通信)。

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

 

 

Guess you like

Origin www.cnblogs.com/h1019384803/p/11257812.html