您好,我们一些喜欢嵌入式的朋友一起建立的一个技术交流平台,本着大家一起互相学习的心态而建立,不太成熟,希望志同道合的朋友一起来,抱歉打扰您了QQ群372991598
串口通信基本原理
处理器与外部设备通信的两种方式
并行通信
传输原理:数据各个位同时传输。
优点:速度快
缺点:占用引脚资源多
串行通信
传输原理:数据按位顺序传输
优点:占用引脚资源少
缺点:速度相对较慢
按照数据传送方向,分为:
单工:数据传输只支持数据在一个方向上传输;
半双工:允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;
全双工:允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力。
串行通信的通信方式
同步通信:带时钟同步信号传输。如SPI,lIC通信接口
异步通信:不带时钟同步信号。如UART(通用异步收发器),单总线
常见串行通信接口
STM32的串口通信接口
UART:通用异步收发器
USART:通用同步异步收发器
大容量STM32F10x系列芯片,如STM32F103ZET6,包含3个USART和2个UART
可以在芯片的数据手册中查到各串口所接的引脚
UART异步通信方式特点
全双工异步通信;
分数波特率发生器系统,提供精确的波特率;
发送和接收共用的可编程波特率,最高可达4.5Mbits/s;
可编程的数据字长度(8位或者9位);
可配置的停止位(支持1或者2位停止位);
可配置的使用DMA多缓冲器通信;
单独的发送器和接收器使能位;
检测标志:1.接收缓冲器 2.发送缓冲器空 3.传输结束标志
多个带标志的中断源。触发中断。
其他:校验控制,四个错误检测标志。
串口通信过程
STM32串口异步通信需要定义的参数
当通信线路上电平状态为1,表示当前线路上没有数据传送,串口处于空闲。
1.起始位:先发出一个逻辑"0"的信号,表示传输字符的开始。
2.数据位(8位或者9位):紧接着起始位之后,数据位的个数可以是4、5、6、7、8等,构成一个字符,从最低位开始传送。
3.奇偶校验位(第9位):数据位加上这一位后,使得"1"的位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。可有可无,CRC校验更准确
4.停止位(1,15,2位):它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。
5.波特率设置
波特率是每秒钟传输的比特位,一般为4800、9600、115200,波特率越大,则数据传输速度越快,但这样就需要接收端也要快速的接收,同时容易受到干扰;波特率越小则传输越慢,抗干扰能力加强;
一般工业领域使用9600比较多,如果是单片机与模块之间的通信,如WiFi模块,则用115200,能及时通信
常用的串口相关寄存器
USART_SR状态寄存器
USART_ DR数据寄存器
USART_BRR波特率寄存器
寄存器的详细描述在stm32中文参考手册中25.6节USART寄存器描述中可以查看到
波特率计算方法
在STM32中文参考手册的USART框图中,这一部分是波特率设置示意图
上式中,fPCLKx是给串口的时钟(PCLK1用于USART2、3、4、5,PCLK2用于USART1);USARTDIV是一个无符号定点数。我们只要得到USARTDIV的值,就可以得到串口波特率寄存器USART1->BRR的值,反过来,我们得到USART1->BRR的值,也可以推导出USARTDIV的值。但我们更关心的是如何从 USARTDIV的值得到USART_BRR的值,因为一般我们知道的是波特率,和 fPCLKx的时钟,要求的就是USART_BRR的值。
只有USART1使用PCLK2(最高72MHz),其它USART使用PCLK1(最高36MHz)。
参考手册中的波特率计算表