树莓派-串口通信(问题记录):serial->Open: Permission denied

serial->Open: Permission denied

  • 1.问题描述
  • 2.解决办法
  • 3.树莓派串口了解

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。
如上图

你可能感兴趣的:(linux,linux)