嵌入式Linux操作UART实例
嵌入式Linux
共 2400字,需浏览 5分钟
· 2020-12-17
1
引言
1
引言
2
环境介绍
2
环境介绍
3
Busybox生成microcom命令
3
Busybox生成microcom命令
4
内核配置
4
内核配置
5
UART操作
5
UART操作
int main (int argc, char *argv[])
{
int fd;
int len, i,ret;
char buf[] = "Hello TopSemic! \n";
fd = open(DEV_NAME, O_RDWR | O_NOCTTY);
if(fd < 0)
{
perror(DEV_NAME);
return -1;
}
len = write(fd, buf, sizeof(buf));
if (len < 0)
{
printf("write data error \n");
}
memset(buf,0x00,sizeof(buf));
len = read(fd, buf, sizeof(buf));
if (len < 0)
{
printf("read error \n");
return -1;
}
printf("%s", buf);
return(0);
}
int main (int argc, char *argv[])
{
int fd;
int len, i,ret;
char buf[] = "Hello TopSemic! \n";
fd = open(DEV_NAME, O_RDWR | O_NOCTTY|O_NDELAY);
if(fd < 0)
{
perror(DEV_NAME);
return -1;
}
len = write(fd, buf, sizeof(buf));
if (len < 0)
{
printf("write data error \n");
}
while(1)
{
memset(buf,0x00,sizeof(buf));
len = read(fd, buf, sizeof(buf));
printf("len:%d \n",len);
if(len>0)
printf("%s", buf);
usleep(100000);
}
}
static struct termios newtios,oldtios; /*termianal settings */
static int saved_portfd=-1; /*serial port fd */
static void reset_tty_atexit(void)
{
if(saved_portfd != -1)
{
tcsetattr(saved_portfd,TCSANOW,&oldtios);
}
}
/*cheanup signal handler */
static void reset_tty_handler(int signal)
{
if(saved_portfd != -1)
{
tcsetattr(saved_portfd,TCSANOW,&oldtios);
}
_exit(EXIT_FAILURE);
}
static set_port_attr (int portfd,int baudrate)
{
struct sigaction sa;
/*get serial port parnms,save away */
tcgetattr(portfd,&newtios);
memcpy(&oldtios,&newtios,sizeof newtios);
/* configure new values */
cfmakeraw(&newtios); /*see man page */
newtios.c_iflag |=IGNPAR; /*ignore parity on input */
newtios.c_oflag &= ~(OPOST | ONLCR | OLCUC | OCRNL | ONOCR | ONLRET | OFILL);
newtios.c_cc[VMIN]=1; /* block until 1 char received */
newtios.c_cc[VTIME]=0; /*no inter-character timer */
switch(baudrate) {
case 9600:
cfsetispeed(&newtios,B9600);
cfsetospeed(&newtios,B9600);
break;
case 19200:
cfsetispeed(&newtios,B19200);
cfsetospeed(&newtios,B19200);
break;
case 38400:
cfsetispeed(&newtios,B38400);
cfsetospeed(&newtios,B38400);
break;
case 115200:
cfsetispeed(&newtios,B115200);
cfsetospeed(&newtios,B115200);
break;
}
/* register cleanup stuff */
atexit(reset_tty_atexit);
memset(&sa,0,sizeof sa);
sa.sa_handler = reset_tty_handler;
sigaction(SIGHUP,&sa,NULL);
sigaction(SIGINT,&sa,NULL);
sigaction(SIGPIPE,&sa,NULL);
sigaction(SIGTERM,&sa,NULL);
/*apply modified termios */
saved_portfd=portfd;
tcflush(portfd,TCIFLUSH);
tcsetattr(portfd,TCSADRAIN,&newtios);
return portfd;
}
int main (int argc, char *argv[])
{
int fd;
int len, i,ret;
char buf[] = "Hello TopSemic! \n";
fd = open(DEV_NAME, O_RDWR | O_NOCTTY|O_NDELAY);
if(fd < 0)
{
perror(DEV_NAME);
return -1;
}
set_port_attr (fd,115200);
len = write(fd, buf, sizeof(buf));
if (len < 0)
{
printf("write data error \n");
}
while(1)
{
memset(buf,0x00,sizeof(buf));
len = read(fd, buf, sizeof(buf));
printf("len:%d \n",len);
if(len>0)
printf("%s", buf);
usleep(100000);
}
return 0;
}
6
结束语
6
结束语
评论
盘点Lombok的几个骚操作,你绝对没用过!
👉 欢迎加入小哈的星球 ,你将获得: 专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡 / 赠书福利全栈前后端分离博客项目 2.0 版本完结啦, 演示链接:http://116.62.199.48/ ,新项目正在酝酿中
小哈学Java
0
我发现 Lombok的几个骚操作,哈哈好用
大家好,我是小富~前言本文不讨论对错,只讲骚操作。有的方法看看就好,知道可以这么用,但是否应用到实际开发中,那就仁者见仁,智者见智了。一万个读者就会有一万个哈姆雷特,希望这篇文章能够给您带来一些思考。耐心看完,你一定会有所收获。@onX例如 onConstructor, oMet
程序员内点事
0
一个神奇的 Linux命令——type
转自:科学随想录在Linux系统中,了解命令的类型、位置和完整路径对于系统管理和开发非常重要。type命令是一个强大而实用的工具,能够帮助我们查看给定命令的类型、位置和完整路径。在本文中,我们将深入探索type命令的用法和功能,并提供详细的代码示例和输出,以帮助读者全面了解该命令。第一部分:type
开源Linux
0
牛逼啊,几乎涵盖了SpringCloud所有操作
前言Spring Cloud Alibaba为分布式应用开发提供了一站式解决方案。它包含开发分布式应用程序所需的所有组件,可以轻松地使用Spring Cloud开发应用程序。使用Spring Cloud Alibaba,只需添加一些注解和少量配置,即可将Spring Cloud应用连接到Alibab
java团长
0
Linux系统性能优化:七个实战经验
来源公众号:twt社区IT社区原文链接:https://mp.weixin.qq.com/s/Rey0gSnnj-zoAEwE6J-GjwLinux系统的性能是指操作系统完成任务的有效性、稳定性和响应速度。Linux系统管理员可能经常会遇到系统不稳定、响应速度慢等问题,例如在Linux上搭建了一个w
开源Linux
1
大视频周报|全国酒店电视操作复杂专项治理动员部署电视电话会在京召开
小美播报本 期 看 点广电总局发4K超高清机顶盒技术新标准;总局公示《智能电视操作系统 第8部分:分类分级》等两项行业标准;工信部组织开展今年5G轻量化(RedCap)贯通行动;全国酒店电视操作复杂专项治理动员部署电视电话会在京召开......(今日流媒体vip可免费获取报告PDF版,详情请见文末。
流媒体网
0
腾讯开始收费,这软件的良心操作彻底没了
腾讯作为互联网巨头,也曾出品过不少良心软件,比如QQ影音就因安装包小、CPU占用少、界面简洁无广告无插件等备受用户喜爱。但因为没有合适的赚钱盈利模式,QQ影音逐渐要被腾讯放弃。腾讯文档也因其实用性,受到不少办公族用户的关注。其实对于微信用户来说,腾讯文档还有许多鲜为人知的使用技巧。比如,我们在微信里
逆锋起笔
10
一个大佬的嵌入式软件学习之路
最近认识一个大佬,将他多年的开发经验整理成一个小的实战课,个人感觉不错,非常切近实战项目开发,如果你是初学者或者想进阶学习的话,可以去听听,强烈推荐!2024嵌入式软工程师培训第一期主要介绍:(1) 结合实际项目讲解数据手册+驱动编写。方案设计-协议制定-软件架构设计-模块调
李肖遥
0