1、標準レベル
異なる通信規格は、レベルを使用し、シリアル通信に分割することができる TTLの標準RS-232 次のように、標準:
図から分かる、 TTLの標準使用レベル5Vのハイレベルを示し、使用0Vがローレベルを示しています。でR232のレベル基準、抗ジャミング機能、シリアル通信の長距離伝送を増加させるために、使用-15Vがハイレベルを示す、の使用+ 15Vはローレベルを表します。描かRS232 とTLL 同じ信号を比較した場合に発現レベルの基準。
電子回路において、TTLレベルは、一般に通信に使用され、PCでRS232レベルを用いて通信を行います。だから、作るために、電子デバイスは、シリアル通信であってもよいし、PCは別の信号TTLレベルのRS232レベルに変換する必要があります。
2、シリアル・プロトコル
シリアル通信の間で非常に人気のあるデバイスである英語の完全なシリアル通信シリアル通信、。
シリアル通信プロトコル、それを介してシリアル通信デバイスによって送信されたデータパケット 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断开符号检测、噪音标志(仅在多缓冲器通信)和帧错误(仅在多缓冲器通信)。
如果设置了对应的使能控制位,这些事件就可以产生各自的中断,可以在中断服务函数内通过判断状态寄存器的位来区分是哪个中断。