全志Orangepi 串口通信 开发

使用wiringPi库进行串口通信的问题与解决方案
文章描述了在Linux环境下利用wiringPi库进行串口通信时遇到的数据接收不全的问题,作者提供了包含发送和接收线程的代码示例,并指出了使用read函数同样存在类似问题。文章还包含了自编写的串口通信模块源码,用于串口数据交互。

利用 wiringPi库 开发:

    拷贝:cp ../wiringpifromWindows/wiringOP-master/examples/serialTest.c ..  

用到串口小助手(安信可) :   连接引脚 TX--RX  、RX--TX  、GND--接地 

  数据交互:

        全志的板子 调用wiringpi 库 串口 传数据 ,出现 怎么接收数据总出错,或者 接收到的数据不全 的问题:

运行结果显示:

修改后,代码:


/* 用wiringpi库串口测试
 * serialTest.c
 *    */

#include <stdio.h>
#include <string.h>
#include <errno.h>
#include<pthread.h>
#include <wiringPi.h>
#include <wiringSerial.h>
#include<stdlib.h>
#i
### Orangepi 串口配置教程 Orangepi 是一款基于 ARM 架构的单板计算机,其串口功能广泛用于调试和通信场景。以下是关于 Orangepi串口配置及其使用方法的相关说明。 #### 配置串口硬件连接 在物理层面上,Orangepi 提供多个 UART 接口,具体取决于所使用的型号。通常情况下,UART0 被预留给调试用途,而其他 UART 可能需要通过 GPIO 引脚启用。对于全志 H616 平台,需注意以下几点: - **GPIO 映射**:确保正确识别并映射所需的 GPIO 到对应的 UART 功能[^3]。 - **跳线设置**:部分 Orangepi 板卡可能需要调整跳线来激活特定的 UART 接口。 #### 修改内核配置以支持串口 为了使 Linux 系统能够正常工作于指定的串口设备,需要编辑 `/boot/orangepiEnv.txt` 文件中的 `overlays` 参数。例如,如果目标是启用 UART1,则可以添加如下内容: ```bash sudo vim /boot/orangepiEnv.txt ``` 在文件中增加以下行: ```plaintext overlays=uart1 ``` 保存更改后重新启动系统以应用新的配置: ```bash sudo reboot ``` #### 测试串口功能 完成上述操作之后,可以通过简单的命令行工具验证串口是否可用。常用的工具有 `minicom` 和 `screen`。 ##### 安装 minicom 工具 如果没有安装 `minicom`,可通过 APT 包管理器获取它: ```bash sudo apt update && sudo apt install minicom -y ``` 随后运行以下命令连接至目标串口(假设为 `/dev/ttyS1`): ```bash sudo minicom -b 9600 -o -D /dev/ttyS1 ``` 其中 `-b` 表示波特率,这里设为标准值 9600;`-D` 后跟具体的设备路径。 ##### 编写 C/C++ 应用程序控制串口 除了利用现成软件外,还可以编写自定义的应用程序实现更复杂的逻辑处理。下面展示了一个基本的例子,演示如何发送字符串数据给外部设备并通过同一端接收响应消息。 ```c #include <stdio.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <termios.h> int main() { int fd; struct termios options; // 打开串口设备 if ((fd = open("/dev/ttyS1", O_RDWR | O_NOCTTY)) == -1) { perror("无法打开串口"); return -1; } tcgetattr(fd, &options); cfsetispeed(&options, B9600); cfsetospeed(&options, B9600); options.c_cflag |= (CLOCAL | CREAD); /* 忽略载波检测 */ options.c_cflag &= ~PARENB; /* 关闭校验位 */ options.c_cflag &= ~CSTOPB; /* 设置停止位为一位 */ options.c_cflag &= ~CSIZE; /* 清除字符大小掩码 */ options.c_cflag |= CS8; /* 设定数据位数 */ tcsetattr(fd, TCSANOW, &options); char buffer[] = "Hello from Orange Pi!"; write(fd, buffer, strlen(buffer)); sleep(1); close(fd); } ``` 编译此代码片段前,请确保已安装 GCC 编译环境以及必要的头文件集合。 --- ####
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值