linux控制串口屏linux应用

2019-07-12 23:24发布

linux串口应用编程简述

linux uart编程是嵌入式应用领域一个十分重要的技术。uart可以用于控制台输出,以及不同模块间的数据传输等。
linux uart下串口编程主要操作步骤是设置波特率。

串口屏的使用说明

在需要快速开发的项目中,买成熟的显示屏方案会大大加快开发速度。市场上很多类似的产品,例如我选了一家可以方便定制显示画面又编程方便的一个方案。屏的使用只需要在串口上发送指定的命令,就可以实现屏的不同显示。
根据使用手册,发送“page key”字符串可以显示键盘界面,发送“page main”可以显示主页面等等。加上特定的结束符(0xff 0xff 0xff),就可以将一条指令发送出去。

编程实现

#include #include #include #include #include #include /* POSIX terminal control definitions */ #include int open_uart_dev(int b_uart_num) { int fd = 0, b_LogiChannel = 0; switch(b_uart_num) { case 3: fd = open("/dev/ttyS1", O_RDWR); //UART3 break; case 4: fd = open("/dev/ttyS2", O_RDWR); //UART4 break; case 5: fd = open("/dev/ttyS0", O_RDWR); //UART5 = debug console break; default: fd = -1; break; } // printf("[%s,%d]******fd = %d***** ", __FILE__, __LINE__, fd); return fd; } static void uart_speed_set(int fd) { struct termios options; /* * Get the current options for the port... */ tcgetattr(fd, &options); /* * Set the baud rates to 19200... */ cfsetispeed(&options, B9600); cfsetospeed(&options, B9600); /* * Enable the receiver and set local mode... */ options.c_cflag |= (CLOCAL | CREAD); /* * Set the new options for the port... */ tcsetattr(fd, TCSANOW, &options); } static inline void usage(const char *msg) { printf("usage: %s [options] ", msg); printf(" options- key "); printf(" options- main "); } int main(int argc, char **argv) { int fd = open_uart_dev(3); char key[] = "page key"; char main[] = "page main"; char over[] = {0xff, 0xff, 0xff}; int size = 0; char *opt = NULL; if (argc != 2) { usage(argv[0]); exit(-1); } if (fd < 0) { printf("%s ", strerror(errno)); return -1; } uart_speed_set(fd); opt = argv[1]; /* 刷新按键界面 */ if (!strncmp(opt, "key", strlen("key"))) { size = write(fd, key, strlen(key)); if (strlen(key) != size) printf("write: '%s' error! ", key); else printf("write %s ok ", key); } else if (!strncmp(opt, "main", strlen("main"))) { /* 主界面 */ size = write(fd, main, strlen(main)); if (strlen(main) != size) printf("write: '%s' error! ", main); else printf("write %s ok ", main); } else { usage(argv[0]); close(fd); exit(-1); } size = write(fd, over, sizeof(over)); if (sizeof(over) != size) printf("write over char error! "); else printf("write over char ok "); close(fd); return 0; }