通过简单的参数配置,执行文件+串口号+波特率
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <errno.h> #include <sys/time.h> #include <time.h> #include <string.h> #include <sys/ioctl.h> #include <termios.h> #include <stdint.h> #include <stdio.h> #include <fcntl.h> #include <sys/ioctl.h> #include <linux/spi/spidev.h> #include <string.h> #include <assert.h> #include <netinet/in.h> #include <sys/types.h> #include <signal.h> #include <stdlib.h> #include <sys/time.h> #define msleep(x) usleep(x*1000) void my_printf(const char* head_l, unsigned char*date_in, int length_l) { int k; printf("%s ", head_l); for ( k = 0; k < length_l; k++) { printf("%02x ", date_in[k]); } printf("\n"); } int select_serial_device(int dev_id, char *name) { switch (dev_id) { case 1: strcpy(name, "/dev/ttyS1"); break; case 2: strcpy(name, "/dev/ttyS2"); break; case 3: strcpy(name, "/dev/ttyS3"); break; case 4: strcpy(name, "/dev/ttyS4"); break; case 5: strcpy(name, "/dev/ttyS5"); break; case 6: strcpy(name, "/dev/ttyS6"); break; case 7: strcpy(name, "/dev/ttyS7"); break; case 8: strcpy(name, "/dev/ttyS8"); break; case 9: strcpy(name, "/dev/ttyS9"); break; case 10: strcpy(name, "/dev/ttyS10"); break; case 11: strcpy(name, "/dev/ttyS11"); break; default: return -1; } return 0; } unsigned int choose_baud_rate(int br_id) { unsigned int baud; switch (br_id) { case 0: baud = B0; break; case 50: baud = B50; break; case 75: baud = B75; break; case 110: baud = B110; break; case 134: baud = B134; break; case 150: baud = B150; break; case 200: baud = B200; break; case 300: baud = B300; break; case 600: baud = B600; break; case 1200: baud = B1200; break; case 1800: baud = B1800; break; case 2400: baud = B2400; break; case 9600: baud = B9600; break; case 19200: baud = B19200; break; case 38400: baud = B38400; break; case 57600: baud = B57600; break; case 115200: baud = B115200; break; case 460800: baud = B460800; break; case 921600: baud = B921600; break; case 1000000: baud = B1000000; break; default: printf("input error: baud rate not correct"); return -1; } return baud; } int init_serial_device(char *name, int baud) { int fd; int ret; struct termios options; fd = open(name, O_RDWR | O_NDELAY | O_NOCTTY); if (fd == -1){ printf("%s: open error\n", name); return -1; } ret = tcgetattr(fd, &options); if (-1 == ret) return -1; options.c_cflag &= ~CSIZE; //屏蔽其他标志 options.c_cflag |= CS8; //将数据位修改为8bit options.c_cflag &= ~PARENB; //无校验 options.c_cflag &= ~CSTOPB; // 设置一位停止位; options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); cfsetispeed(&options, baud); cfsetospeed(&options, baud); options.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON); ret = tcsetattr(fd, TCSANOW, &options); if (-1 == ret) return -1; return fd; } void process_serial_data(int fd) { char sendbuf[64] = "123456789123456789123456789123456789"; char recvbuf[64] = ""; int ret; while (1){ ret = write(fd, sendbuf,36); //发送数组 my_printf("send:",sendbuf,ret); msleep(100); while(1){ memset(recvbuf, 0, sizeof(recvbuf)); ret = read(fd, recvbuf, 255); if (ret == 0) continue; if(ret>0){ my_printf("recv:",recvbuf,ret); break; } } msleep(200); } } int main(int argc, char **argv) { int fd; int bn; int ret; char name[12]; char sn; speed_t baud; if (argc < 2){ printf("input error:*argv=1-11\n"); exit(-1); } if (argc > 3){ printf("input error: less than 4 parameters\n"); exit(-1); } ret = sscanf(argv[1], "%d", &sn); ret = select_serial_device(sn,name); if (-1 == ret) return -1; ret = sscanf(argv[2], "%d", &bn); baud = choose_baud_rate(bn); if (-1 == ret) return -1; fd = init_serial_device(name,baud); if (-1 == fd) return -1; process_serial_data(fd); return 0; }
直接交叉编译即可
Life is mess, don't let mess mess us.
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库