串口(51单片机)
串行通信接口简称为串口,是设备间通信的一种方式。串行通信是指数据一位一位地顺序传送,是属于全双工通信。常见地电气标准有RS232、RS422等。
常见的UART是指通用异步接收/发送,包含了TTL电平和RS232电平的串口。RS232电平:逻辑1为-3~-15V,逻辑0为3~15V;TTL电平:+5V为逻辑1,0V为逻辑0。
串口接线:交叉接线,单片机的数据输入接外部设备的数据发送;单片机的数据发送接外部设备的数据输入
因为通信的双方时钟不同,硬件配置不同,但又要设定好通信的速率,因此需要调节波特率。这是异步串行通信的关键。
以51单片机为例子,输入/输出数据缓冲器叫做SBUF,代码体现就是接收数据时char data = SBUF;发送数据时SBUF = data。接收标志位为RI和TI,当接收SBUF满时,RI会被硬件置1;反之,发送SBUF满时,TI会被硬件置1。这两个标志位都需要软件置1。
串口数据格式一般为起始位+数据位+校验位+停止位。根据工作方式的选择有无校验位。
波特率的计算要根据串口工作方式的选择所提供的公式进行计算。
void UartInit(void) //9600bps@11.0592MHz
{
SCON = 0x50; //配置串口工作方式1,REN使能接收
TMOD &= 0x0F;
TMOD |= 0x20;//定时器1工作方式位8位自动重装
TH1 = 0xFD;
TL1 = 0xFD;//波特率的初值
TR1 = 1;//启动定时器
EA = 1;//开启总中断
ES = 1;//开启串口中断
}
注:时钟周期和机器周期的区别:时钟周期是指计算机最小的时间单位,一般为时钟频率的倒数;而机器周期是指CPU完成一个基本操作所需要的时间,机器周期一般为若干个时钟周期。
蓝牙透传(HC-08)
透传即为透明传输,是指在数据的传输过程中,通过无线的方式这组数据不发生任何形式的改变。基本的使用方法与串口一致,接线方式也是交叉接线,当单片机完成串口的初始化,完成串口数据的相关处理,就可以通过相关的蓝牙助手进行上位机和单片机的无线数据传输。
这款蓝牙模块是基于AT指令集进行设计的,可以利用AT指令完成对蓝牙名称修改等操作。
WIFI无线传输(ESP8266)
需要利用AT指令集进行入网初始化,相关的AT指令一般可以找商家获得。这里列举一些常用的AT指令。
波特率设置:AT+UART=波特率,数据位数,1,0,0
工作模式设置:AT+CWMODE=3 // 1. 设备模式 2.是路由模式 3.是双模
设备模式连接路由器:AT+CWJAP="路由器名称","路由器密码"
查询IP地址:AT+CIFSR // APIP指路由模式IP地址,可做服务器供设备连接;STAIP为设备模式连接路由器后分配的IP地址
连接服务器:AT+CIPSTART="协议类型(TCP/UDP)","服务器IP地址",端口
发送数据:第一种方式:AT+CIPSEND=4 // 设置即将发送数据的长度 (这里是4个字节),每次发送都要先设置发送长度;
第二种方式:AT+CIPMODE=1 //开启透传模式,+++可以退出透传模式
单片机利用ESP8266进行联网时,要注意对入网初始化的每一步进行标志位检测再进行下一步初始化(因为联网需要时间,发送数据需要时间),提高初始化和联网的成功率。(每一句AT指令成功设置到都会有回复)
利用ESP8266使单片机成为服务器,也需要相关的AT指令初始化ESP8266。
使能连接:AT+CIPMUX=1 // 支持多个设备连接,每个设备都可以对单片机进行通信
建立TCP服务器:AT+CIPSERVER=1
服务器对客户端发送数据:AT+CIPSEND=客户通道,发送数据字节数
AT+CIPSEND=0,4 // 发送4个字节在连接0通道上
服务器接收到数据:+IPD, 0, n: xxxxxxx //+IPD是固定字符串 0是通道,n是数据长度,xxx是数据
断开连接:AT+CIPCLOSE=0
同样单片机对ESP8266的初始化每一步都要检测标志位,提高成功率。
4g模块内网穿透(EC03-DNC)
同样是基于AT指令集的开发,需要利用AT指令进行初始化,并且需要插入SIM卡才可以正常使用。默认为透传的方式进行数据传输。
通过AT指令进行初始化,可以检查SIM卡,设置内网IP连接服务器,因为4g模块不属于局域网,因此需要申请一个公网IP给4g模块,这就叫内网穿透,完成初始化后,可以类似与蓝牙模块一样的使用,可以连接上服务器。
连接socket服务器:AT+SOCK=TCPC,内网IP地址
个人学习记录,若有错误希望指正