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

本文探讨了在树莓派上遇到的串口Open权限受限问题,提供了两种解决方法,包括修改设备权限和配置文件,以及介绍了树莓派串口资源的分配原理。重点在于理解串口权限问题和如何正确配置以确保串口通信的正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

serial->Open: Permission denied

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值