1、串口通信协议简述
串口通信通常使用于多机通信当中。
全双工:双方同一时刻可以同时发送或者接受。
半双工:双方同一时刻只有一方可以发送或者接受。
数据格式和波特率要相同。
2、常用api
树莓派向串口发送字符和字符串:
#include <wiringPi.h>
#include <wiringSerial.h>
#include <stdio.h>
int main()
{
int fd;
if(-1 == wiringPiSetup()){
printf("硬件初始化失败\n");
}
fd = serialOpen("/dev/ttyAMA0",9600);
while(1){
serialPutchar(fd,'c');
//serialPuts(fd,"Hello World!\r\n"); // \r回车 \n换行
delayMicroseconds(1000000);//微妙函数
}
return 0;
}
树莓派读串口:
#include <wiringPi.h>
#include <wiringSerial.h>
#include <stdio.h>
int main()
{
int fd;
int cmd;
if(-1 == wiringPiSetup()){
printf("硬件初始化失败\n");
}
fd = serialOpen("/dev/ttyAMA0",9600);
while(1){
while(serialDataAvail(fd) != -1){
cmd = serialGetchar(fd);
printf("get data is %d\n",cmd);
}
}
return 0;
}
通常串口调试助手以文本的形式发送2,即发送了一个字符2。此时用%d格式树莓派端得到的将是2的ASCII码,值为50,可用%c转为字符。
树莓派和PC串口交互:
#include <wiringPi.h>
#include <wiringSerial.h>
#include <stdio.h>
int main()
{
int fd;
int cmd;
if(-1 == wiringPiSetup()){
printf("硬件初始化失败\n");
}
fd = serialOpen("/dev/ttyAMA0",9600);
while(1){
while(serialDataAvail(fd) != -1){
cmd = serialGetchar(fd);
if(cmd == '2'){
serialPuts(fd,"Pi receive 2 from you!\r\n");
}
if(cmd == '3'){
serialPuts(fd,"Pi receive 3 from you!\r\n");
}
if(cmd == '4'){
serialPuts(fd,"Pi receive 4 from you!\r\n");
}
}