串口通信概况
常用于多机通信
模块化编程
半双工通信:只能单方发消息
全双工通信:两方都能发信息
串口通信是全双工
一个是整个服务需求处理器,一个是挂载的交互信息的载体设备
都有独立的代码,独立的硬件
通信要求
1、两个通信之间需要有共同的,相互能识别的语言
2、要有一样的传输速度
串口通信的两点要求是:
- 数据格式
- 数据位
- 停止位
- 奇偶校验位
- 波特率
串口通信代码
每隔一秒发一个字符
#include<stdio.h>
#include<wiringSerial.h>
#include<wiringPi.h>
int main()
{
int fd;
wiringPiSetup(); //初始化硬件设备
fd = serialOpen("/dev/ttyAMA0",9600); //打开串口,定义波特率为9600
while(1){
serialPutchar(fd,'c'); //发送单个字符
delayMicroseconds(1000000); //1秒的等待时间
}
serialClose(fd);
return 0;
}
每隔一秒发一个字符串
不能发中文
#include<stdio.h>
#include<wiringSerial.h>
#include<wiringPi.h>
int main()
{
int fd;
wiringPiSetup(); //初始化硬件设备
fd = serialOpen("/dev/ttyAMA0",9600); //打开串口,定义波特率为9600
while(1){
serialPuts(fd,"yangyingchun is king!\r\n"); //发送字符串
delayMicroseconds(1000000); //1秒的等待时间
}
serialClose(fd);
return 0;
}
接收串口发来的数据,并打印
#include<stdio.h>
#include<wiringSerial.h>
#include<wiringPi.h>
int main()
{
int fd;
int cmd;
wiringPiSetup(); //初始化硬件设备
fd = serialOpen("/dev/ttyAMA0",9600); //打开串口,定义波特率为9600
while(1){
while(serialDataAvail(fd) != -1){
cmd = serialGetchar(fd); //接收串口发来的字符
printf("get data cmd= %d\n", cmd);
}
}
serialClose(fd);
return 0;
}
判断收到的字符,返回预设的对应信息
#include<stdio.h>
#include<stdlib.h>
#include<wiringSerial.h>
#include<wiringPi.h>
int main()
{
int fd;
int cmd;
wiringPiSetup(); //初始化硬件设备
fd = serialOpen("/dev/ttyAMA0",9600); //打开串口,定义波特率为9600
while(1){
while(serialDataAvail(fd) != -1){
cmd = serialGetchar(fd);
if(cmd == '1'){
serialPuts(fd,"yangyingchun is king_one!\r\n");
printf("get data cmd= %c\n", cmd);
}
if(cmd == '2'){
serialPuts(fd,"yangyingchun is king_two!\r\n");
printf("get data cmd= %c\n", cmd);
}
if(cmd == '3'){
serialPuts(fd,"yangyingchun is king_three!\r\n");
printf("get data cmd= %c\n", cmd);
}
if(cmd == '4'){
serialPuts(fd,"king quit!\r\n");
printf("quit\n");
serialClose(fd);
exit(-1);
}
}
}
serialClose(fd);
return 0;
}