1.问题描述
首先,给出我的部分代码,
int voiceInit(struct InputCommander *voicer,char *ipAdress,char *port)
{
int fd;
if((fd = serialOpen(voicer->deviceName,9600))== -1)
{
printf("%d\n",fd);
perror("serial->Open");
exit(-1);
}
voicer->fd=fd;
printf("serialOpen's fd is %d\n",fd);
return fd;
}
程序编译时,并未出现问题,当执行可执行文件时,打印出问题:
serial->Open: Permission denied
这是权限不够
2.解决办法
第一种:sudo chmod 777 /dev/ttyAMA0
第二种:sudo ./a.out
3.树莓派串口了解
树莓派3里面板载串口和蓝牙是不能同时使用的,根据官方给出的原因是:原因是树莓派CPU内部有两个串口,一个是硬件串口(官方称为PL011UART),一个是迷你串口(官方成为mini-uart)。
树莓派3,硬件串口被蓝牙模块占用,而将一个没有时钟源,“迷你串口”分配给了GPIO的串口,这样以来由于内核的频率本身是变化的,就会导致“迷你串口”的速率不稳定,这样就出现了无法正常使用的情况。
树莓派串口之间的映射关系(更改后)
修改 serial0 和 serial1 的物理映射,解除蓝牙占用串口
sudo vi /boot/config.txt
末尾添加一行:
dtoverlay=pi3-miniuart-bt
重启再次查看 serial0 和 serial1 的映射。他俩已经被互换,如果需要使用GPIO上的串口,现在需要指定外设 /dev/ttyAMA0。
如上图