OrangePi香橙派 开启Uart串口

1.WiringPi串口示例程序报错:No Such File or directory

香橙派虽然是一款性价比很高的Linux开发板,但是和树莓派相比,其开发文档、社区资源都相对匮乏,而且很多库都是从树莓派那移植过来的,比如控制IO的库:WiringPi,而这往往会导致一些错误的发生,比如这个让我头痛的串口错误:

 分析错误的原因,不难发现问题出在/dev/ttyAMA0这,ls /dev后发现香橙派的ubuntu系统下居然没有这个设备:

于是我就开始在网络上搜索,然而给出的解决方案多是树莓派的,因为树莓派蓝牙串口会与硬件串口冲突,而boot/overlays里有个文件是可以恢复硬件串口的,但是对于香橙派,我只想说连这个文件夹都木有啊!

2.香橙派的串口设备dev/ttySx

经过一系列的折腾,终于搞明白香橙派串口设备在哪

cat /proc/tty/drivers

香橙派的硬件串口Uart的设备名称为ttySx,usb串口名称为ttyUSBx ,而不是树莓派的设备名称ttyAMA0!

但是新的问题又来了,为什么没有ttyS1,ttyS2,ttyS3?

3.修改香橙派硬件配置文件script.fex

多谢https://blog.youkuaiyun.com/renpeng009672/article/details/85100828这篇文章的答案,真是网上找了好久好久都没有找到解决办法,真是要吐槽香橙派技术文档真是少,系统也BUG很多!

香橙派硬件配置可以通过修改script.fex完成(类似树莓派raspi-config的操作)

香橙派使用的是全志的芯片,该类芯片的硬件配置可以参考这份H3芯片手册

http://www.doc88.com/p-9681502404051.html

具体的操作方法:

(1)下载sunxi-tools并编译(如果没有git指令需要安装git)

git clone git://github.com/linux-sunxi/sunxi-tools.git
cd sunxi-tools
make

香橙(Orange Pi)是一款基于Linux的开源单板电脑,而UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)串口通信是一种常见的计算机硬件接口,用于设备之间的串行数据传输。 在香橙上使用UART进行串口通信,通常步骤如下: 1. **硬件配置**:首先,你需要连接一根串口线(例如DB9或UART-TTL),将香橙串口端口(如UART0、UART1)与外部设备相连。 2. **驱动安装**:确保Linux系统中已经安装了UART相关的驱动程序,如果没有,可以通过命令行安装。 3. **打开串口**:使用相应的系统调用,如在bash下可能使用`stty`命令设置波特率、数据位数等参数,并打开串口。 4. **编写程序**:在C/C++或者其他支持的编程语言中,创建文件并编写发送和接收数据的代码。这包括初始化串口、设置模式、读写数据以及处理错误处理。 ```c #include <stdio.h> #include <fcntl.h> #include <sys/ioctl.h> #include <termios.h> #define UART_PORT "/dev/ttyAMA0" // 假设为UART0 #define BAUD_RATE 9600 int main() { int fd = open(UART_PORT, O_RDWR | O_NOCTTY | O_NDELAY); if (fd == -1) { perror("Error opening serial port"); return 1; } struct termios options; bzero(&options, sizeof(options)); cfsetispeed(&options, B9600); // 设置波特率为9600 cfsetospeed(&options, B9600); options.c_cflag |= CS8; // 8位数据传输 options.c_cflag &= ~PARENB; // 关闭奇偶校验 options.c_cflag &= ~CSTOPB; // 单位位停止位 options.c_cflag &= ~CSIZE; // 取消其他数据长度选项,默认是8位 options.c_cflag |= CREAD | CLOCAL; // 允许可读和本地模式 options.c_iflag &= ~(IXON | IXOFF | IXANY); // 关闭DTR/DCD流控 tcflush(fd, TCIFLUSH); // 清空输入缓冲区 tcflush(fd, TCOFLUSH); // 清空输出缓冲区 tcsetattr(fd, TCSANOW, &options); // 应用新设置 // 发送数据 char data[] = "Hello, UART!"; write(fd, data, strlen(data) + 1); close(fd); return 0; } ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值