串口通信常用于多机通信,串口通信属于全双工通信,可同时进行数据交互,半双工则只允许数据单向传输。
串口通信需要提供波特率、数据位、校验位、停止位。
串口地址:默认一般是"/dev/ttyAMA0"
树莓派第一次使用串口, 要用串口进行通信,需要对串口配置
修改cmdline.txt文件
sudo vi /boot/cmdline.txt
删除 console=ttyAMA0,115200
串口常用API
使用时需要包含头文件:#include <wiringSerial.h>
示例
#include<wiringPi.h>
#include<wiringSerial.h>
#include<stdio.h>
int main()
{
int fd;
int cmd;
if(wiringPiSetup() == -1){
printf("初始化失败!!\n");
return -1;
}
fd = serialOpen("/dev/ttyAMA0",9600);
if(fd == -1){
printf("串口打开初始化失败!!\n");
return -1;
}
while(1)
{
while(serialDataAvail(fd) != -1){
cmd = serialGetchar(fd);
if(cmd == '1'){
printf("get data:cmd=%c\n",cmd);
serialPuts(fd,"通信1\r\n");
}
if(cmd == '2'){
printf("get data:cmd=%c\n",cmd);
serialPuts(fd,"通信2\r\n");
}
if(cmd == '3'){
printf("get data:cmd=%c\n",cmd);
serialPuts(fd,"通信3\r\n");
}
}
}
serialClose(fd);
return 0;
}
补充:串口输出中文时乱码的问题
可能的原因:
串口驱动程序
波特率不同步
字符编码不同步
串口助手不支持字符编码方式
我上面示例所用的串口助手 星瞳串口助手 (支持Mac,Windows,Ubuntu)