1 Star 0 Fork 0

Shaco/rk3568_auto_test

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
main.c 2.53 KB
一键复制 编辑 原始数据 按行查看 历史
jun 提交于 2024-10-24 13:56 . 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <termios.h>
#include <errno.h>
void configure_serial_port(int fd) {
struct termios options;
tcgetattr(fd, &options);
// 设置波特率
cfsetispeed(&options, B9600);
cfsetospeed(&options, B9600);
// 设置数据位、停止位及奇偶校验
options.c_cflag &= ~PARENB; // 无奇偶校验
options.c_cflag &= ~CSTOPB; // 1个停止位
options.c_cflag &= ~CSIZE; // 清除数据位设置
options.c_cflag |= CS8; // 8位数据位
// 设置流控制
options.c_cflag &= ~CRTSCTS; // 禁用硬件流控制
// 设置为非规范模式(不等待换行符)
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
// 应用设置
tcsetattr(fd, TCSANOW, &options);
}
void write_gpio_value(int value) {
char command[50];
snprintf(command, sizeof(command), "echo %d > /sys/class/gpio/gpio18/value", value);
system(command);
}
void send_request_to_serial(int fd) {
const char request[] = "\x01\x03\x00\x00\x00\x04\x44\x09";
write(fd, request, sizeof(request) - 1); // -1 to exclude null terminator
}
int main() {
int fd;
unsigned char buffer[256];
ssize_t bytes_read;
// 打开串口
fd = open("/dev/ttyS3", O_RDWR | O_NOCTTY);
if (fd == -1) {
perror("打开串口失败");
return EXIT_FAILURE;
}
// 配置串口
configure_serial_port(fd);
printf("开始接收数据...\n");
// 设置 GPIO 引脚为高电平
write_gpio_value(1);
usleep(100); // 等待一段时间,确保 GPIO 设置生效
// 发送请求到串口
send_request_to_serial(fd);
usleep(10000);
printf("请求已发送到串口。\n");
// 设置 GPIO 引脚为低电平
write_gpio_value(0);
usleep(100); // 等待一段时间,确保 GPIO 设置生效
// 接收数据
while (1) {
bytes_read = read(fd, buffer, sizeof(buffer));
if (bytes_read < 0) {
if (errno == EAGAIN || errno == EWOULDBLOCK) {
continue; // 没有数据可读取
} else {
perror("读取数据失败");
break;
}
} else if (bytes_read > 0) {
// 打印接收到的数据
printf("接收到的数据:");
for (ssize_t i = 0; i < bytes_read; i++) {
printf("%02X ", buffer[i]);
}
printf("\n");
}
}
// 关闭串口
close(fd);
return EXIT_SUCCESS;
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/jun626/rk3568_auto_test.git
git@gitee.com:jun626/rk3568_auto_test.git
jun626
rk3568_auto_test
rk3568_auto_test
master

搜索帮助