嵌入式基础知识-RS232通信协议电路与代码最全分析

1.RS232基本概念

        RS232是异步通信,全双工传输(异步通信就是无时钟CLK信号,全双工就是能同时收发数据)。采用负逻辑传送,规定逻辑“1”的电平为-5V~-15 V,逻辑“0”的电平为+5 V~+15 V。选用该电气标准的目的在于提高抗干扰能力,增大通信距离,但是在工业中传输距离只有15m,相对RS485来说较短,所以在工业中用RS232不常见。RS232常见的接口是DB9,一般都有专门的线进行连接。

2.RS232电路设计

        在工业上控制器常采用从MCU-光电耦合-电平转换-DB9接口的设计,如图所示,一般会在MCU和转换电平中加入光电耦合芯片,光耦的主要作用是实现信号的隔离,通过光耦隔离来实现信号的隔离传输,使电平转换芯片与MCU系统不共地,完全隔离则有效的抑制了高共模电压的产生,大大降低232的损坏率,提高了系统稳定性。电平转换主要是由于TTL信号不能直接被RS232标准传输协议直接识别从而需要改变他的电平标准。光电耦合芯片一般采用6N137、TLP2361等,电平转换一般采用MAX3232、SP3232芯片。

        TTL电平标准,输出 L: <0.8V ; H:>2.4V。输入 L: <1.2V ; H:>2.0V。TTL器件输出低电平要小于0.8V,高电平要大于2.4V。输入,低于1.2V就认为是0,高于2.0就认为是1。于是TTL电平的输入低电平的噪声容限就只有(0.8-0)/2=0.4V,高电平的噪声容限为(5-2.4)/2=1.3V。

        RS232电平标准,逻辑1的电平为-3~-15V,逻辑0的电平为+3~+15V,注意电平的定义反相了一次。电路的具体方案可以大家去网上找原理图。

                                                          MAX3232电平芯片转换 

                                                            电路结构

3.HAL库程序编写

        RS232代码与配USART一样只需要配2个脚就行了,验证的话使用打印函数,在上位机上进行打印。分别是usart.h、usart.c、main.c

#ifndef __Usart_H
#define __Usart_H

#include "sys.h"
#include "stdio.h"
#define USART_REC_LEN  			200  	//定义最大接收字节数 200
#define EN_USART1_RX 			1		//使能(1)/禁止(0)串口1接收  
#define RXBUFFERSIZE   1 //缓存大小
extern u8  USART_RX