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);
break;
case 4:
fd = open("/dev/ttyS2", O_RDWR);
break;
case 5:
fd = open("/dev/ttyS0", O_RDWR);
break;
default:
fd = -1;
break;
}
return fd;
}
static void uart_speed_set(int fd)
{
struct termios options;
tcgetattr(fd, &options);
cfsetispeed(&options, B9600);
cfsetospeed(&options, B9600);
options.c_cflag |= (CLOCAL | CREAD);
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;
}