本文共 2527 字,大约阅读时间需要 8 分钟。
基于Linux系统的串口操作虽然比普通单片机复杂一些,但实际上同样相对容易。串口在Linux中的操作主要分为两部分:底层驱动部分(包括设备注册)和用户层应用程序部分。对于使用AT91SAM9261EK开发板的开发者来说,只需编写简单的用户应用程序即可实现串口通信。
在开发过程中,首先需要确保开发板的内核中所有可用串口都已注册。通过查看内核启动信息,可以发现DEBUG串口已成功注册。而其他两个测试串口则需要修改内核中的相关文件(如linux-2.6.32.2/arch/arm/mach-at91/board-sam9261ek.c)来注册这些串口设备。修改完成后,重新编译内核即可使所有三个串口都成功注册。
在串口操作方面,Linux中的串口设备可以像普通文件一样通过open、read和write等函数进行控制。以下是一个简单的应用程序示例:
#include#include #include #include #include #define BAUDRATE B9600static int open_com(char *dev_name, int com_baud, int com_data, int com_pry, int com_stop) { struct termios strNewTio = {0}; int fd; switch(com_baud) { case 50: BAUDRATE = B50; break; case 75: BAUDRATE = B75; break; // ... 其他情况类似 ... case 9600: BAUDRATE = B9600; break; default: BAUDRATE = B9600; break; } switch(com_data) { case 5: com_data = CS5; break; case 6: com_data = CS6; break; case 7: com_data = CS7; break; default: com_data = CS8; break; } switch(com_pry) { case 0: com_pry = 0; break; case 1: com_pry = PARENB | PARODD; break; case 2: com_pry = PARENB; break; default: com_pry = 0; break; } switch(com_stop) { case 1: stop = 0; break; case 2: stop = CSTOPB; break; default: stop = 0; break; } fd = open(dev_name, O_RDWR | O_NOCTTY); if (fd < 0) { printf("com open() error\n"); return -1; } tcgetattr(fd, &strNewTio); strNewTio.c_cflag |= BAUDRATE | com_data | com_pry | stop | CREAD | CLOCAL; strNewTio.c_iflag = 0; strNewTio.c_lflag = 0; strNewTio.c_oflag = 0; if (tcsetattr(fd, TCSANOW, &strNewTio) < 0) { close(fd); printf("tcsetattr() error\n"); return -1; } return fd;}int main() { int fd1, fd2; char *dev1 = "/dev/ttyS0", *dev2 = "/dev/ttyS1"; char wr = 'k'; char rd[1024]; fd1 = open_com(dev1, 9600, 8, 0, 1); if (fd1 < 0) { printf("无法打开 %s\n", dev1); return 0; } printf("成功打开串口 %s\n", dev1); fd2 = open_com(dev2, 9600, 8, 0, 1); if (fd2 < 0) { printf("无法打开 %s\n", dev2); return 0; } while (1) { write(fd1, &wr, 1); sleep(100); int ret = read(fd2, rd, 512); if (ret > 0) { printf("接收到数据:%s\n", rd); write(fd2, rd, strlen(rd)); memset(rd, 0, 512); } } return 0;}
综上所述,与普通单片机相比,基于Linux系统的串口操作主要涉及内核驱动和用户层应用的实现。通过合理配置和简单的应用程序,便可以轻松实现串口通信功能。
转载地址:http://fzfpz.baihongyu.com/