历史上的今天
返回首页

历史上的今天

今天是:2024年12月18日(星期三)

正在发生

2018年12月18日 | 基于arm11处理器S3C6410内核的linux下串口通信实现

2018-12-18 来源:eefocus

/*例程目的:通过向内核加载独立按键模块,串口通信模块,编写应用程序,使得当按键按下时,arm可以通过串口对外发送数据。已达到arm与其他设备间的串口通信的目的*/


一、基础知识


1.串口基本知识:串口:计算机上一种非常通用设备通信协议。串口通信:串口按位发送和接收字节。


2.设备驱动:linux下总共有三种设备方式:字符设备,块设备,网络设备。这里串口和键盘都是字符设备。这些设备都在/dev 目录下 。可通过ls -l 来查看设备类型。【crw-rw----  1 root dialout   4,  64  7月  4 02:53 ttyS0】最前面的c表示他是(char)字符设备。


二、程序编写


1.编写驱动程序:


串口设备驱动程序一般在linux和arm都已经加载了,可以在/dev 目前查看一下设备名,串口名一般是ttys0-ttysn。由于此例程还有个独立矩阵按键驱动,这个需要自己加载到arm的内核中。步骤:(1)在网上或者通过其他途径找到矩阵键盘的驱动程序,然后移植到你的平台,然后编写makefile文件,这里我曾出现个问题内核指定目录不对,这时你在linux下是无法编译通过的,修改此路径KERNELDIR := /SRC/kernel/linux-2.6.21_magic。(2)make 一下 生成.ko文件就是可加载的内核模块。这里我曾出现一个错误,多线程的库无法链接,我采取的办法是直接输入命令 arm-linux-gcc keys.c -o key -lpthread.将库动态添加进去。


键盘驱动程序下载地址


2.编写应用程序


串口通信打开串口:fd = open(COM2, O_RDWR );关闭串口:ret=close(fd);打开独立键盘fs = open("/de/KEYS0",0)


写串口:write(fd,&c,n);分别表示文件描述符,存储写入数据的数据缓冲区,写入数据字节数。读串口:read(fd,&c,n);


读矩阵键盘返回4》4键盘的编码ret=read(fs,&keys_value,sizeof(keys_value));看到这里不知道读者有没有体会,linux下的设备操作都是基于文件的,所以有许多相通之处。


以下是我这个程序的发送模块:


void* send(void * data)

{


        //int fd=-1;

        int ret,i;

        unsigned int keys_value=0;

       int c=0x01;

       printf("send data\n");

        while(STOP==FALSE)

       {

        fs = open("/dev/KEYS0",0);//open the button

        if(fd<0)

        {

                printf("open /dev/KEYS error!\n");

                //return -1;

        }


        for(;;)

        {

                ret=read(fs,&keys_value,sizeof(keys_value));

                if(ret<0)

                {

                        printf("read err!\n");

                        continue;

                }


               //write(fd,&c,1);

             //  while(STOP==FALSE)

             // {

                   switch(keys_value)

                {

                      case 0xEE://write(fd,&c,1);//按键1被按下后发送16进制1

                                  write(fd,&c,1);

                                  usleep(100000);

                                  printf("S1 PRESS ,Send 1\n");

                                //  STOP=TRUE;


                                  break;

                      case 0xDE: c++; // 按键2被按下后发送16进制2

                                // write(fd,&c,1);

                                 printf("S2 PRESS,send 2\n");

                               // while(STOP==FALSE)

                               // STOP=TRUE;

                                 printf("send success\n");

                                      write(fd,&c,1);

                                  usleep(100000);

                                    break;


                  }

                keys_value=0;

                c=0x01 ;

}

}

}


注意点:在进行串口通信实验时,好多人都喜欢用全局变量fd来操作,这里有两个设备,所以如果设置一个全局变量时,系统就不知道是在对那个设备进行操作了,这是我进行此实验放下的一个大错误,所以要慎用全局变量。


三、移植程序到arm平台上运行


1.建立nfs服务器,或其他宿主机与arm的通信,将此实验的相关文件复制cp 到可读可写的文件夹下(如yaffs)


2.加载驱动模块到内核:insmod /yaffs/keys.ko ;然后建立设备连接号 mknod  /dev/keys c 252 0


3.  执行可执行应用程序 ./buttonserial_test



推荐阅读

史海拾趣

Arcolectric公司的发展小趣事

Arcolectric深知合作伙伴的重要性,因此一直致力于与全球各地的优质企业建立紧密的合作关系。通过与这些合作伙伴的深入合作,Arcolectric不仅获得了更多的市场机会和资源支持,还不断吸收和借鉴先进的经验和技术,推动公司的持续发展和创新。

Avic公司的发展小趣事

随着中国航空工业的快速发展,Avic公司不断加强在航空电子技术领域的研发和创新。公司成功研制出一系列先进的航空电子系统,这些系统不仅提高了飞机的性能和安全性,也为中国航空工业的国际竞争力奠定了坚实基础。Avic公司在航空电子领域的突破,不仅推动了国内航空工业的发展,也为国际航空市场带来了新的选择。

ETERNA公司的发展小趣事

除了在制表业取得显著成就外,ETERNA还在生物技术领域进行了积极探索。公司利用专有的非病毒、非DNA方法,使用mRNA进行细胞重编程研究。这一技术旨在通过表达特定的蛋白质来逆转细胞的老化过程,实现“倒转时钟”的效果。虽然ETERNA在mRNA领域的具体成果尚未对外公布,但其在该领域的探索精神和技术实力已经引起了业界的广泛关注。

HEC Inc公司的发展小趣事

除了在制表业取得显著成就外,ETERNA还在生物技术领域进行了积极探索。公司利用专有的非病毒、非DNA方法,使用mRNA进行细胞重编程研究。这一技术旨在通过表达特定的蛋白质来逆转细胞的老化过程,实现“倒转时钟”的效果。虽然ETERNA在mRNA领域的具体成果尚未对外公布,但其在该领域的探索精神和技术实力已经引起了业界的广泛关注。

中环(Central)公司的发展小趣事

近年来,中环公司经历了混合所有制改革。2020年7月,TCL科技集团成为公司控股股东。这一改革不仅为公司带来了新的发展机遇和资源支持,也为其未来的发展注入了新的活力。在TCL科技的助力下,中环公司进一步聚焦主业,加速技术创新和产业升级,致力于成为光伏领域的领军企业。

以上五个故事涵盖了中环公司在电子行业里发展起来的不同阶段和方面。通过不断创新和拓展业务,中环公司在保持主业优势的同时,也实现了多元化发展,为其未来的发展奠定了坚实的基础。

Hitano Enterprise Corp公司的发展小趣事

中环公司的前身可以追溯到1958年成立的天津市半导体材料厂。随着技术的不断进步和市场需求的增长,公司在1978年开始涉足区熔单晶硅制造领域,并于1981年正式进入太阳能单晶硅制造领域,成为国内最早涉足光伏领域的企业之一。这一转变不仅体现了中环对市场趋势的敏锐洞察,也为其后续在光伏领域的发展奠定了坚实的基础。

问答坊 | AI 解惑

请教各位

请问微波射频器件的档次是怎么划分的?航天级,军品级,工业级,民用级,四个级别有什么区别?谢谢。…

查看全部问答>

哪位兄弟有PT100的测温电路啊

能否共享呢 要求能实际使用的…

查看全部问答>

涛行MP3开发板焊接体会

收到soso发来的涛行MP3板后,抽空进行了焊接。在焊接过程中有点体会,一个是作者古道热肠设计制作板子精美元件布设合理,整体比较漂亮。但是也有不足之处就是图纸上的元件序号比较乱,比如焊接C5在焊接C6时候就得去另一个地方找了,这样不利于焊接 ...…

查看全部问答>

FPGA学习资料(日后有时间将不断跟新)

还有很多资料 有些也是坛子里以前就有的资料 有空再陆续上传…

查看全部问答>

如何使30万像素的摄像头支持130万像素

如何使30万像素的摄像头支持130万像素 就是说,在系统中能看到支持1028*1024的分辨率…

查看全部问答>

S3C6410 CE6 RAM从128M升级到256M,修改config.bib和image_cfg.h,导致无法启动系统了。

config.bib如下 IF IMGMULTIXIP ! #define     NKNAME       NK #define     RAMNAME      RAM #define     NKSTART     ...…

查看全部问答>

SD卡初始化及读写问题

我在初始化时下CMD0, CMD55等命令均不能成功,不知道是什么原因? 还有CMD命令的执行是否牵涉到Interrupt,也就是说CMD命令的执行是否用到Interrupt, 我对这方面了解不多,请各位多多指点。…

查看全部问答>

IAR ARM5.20调试时光标不在源文件窗口

IAR ARM5.20调试时光标不在源文件窗口,有的项目则能在源文件窗口,很奇怪!…

查看全部问答>

LM3S811串口下载程序问题

买的LM3S811开发板中自带boot_serial中,自动检测某个GPIO引脚(该引脚的作用是接收更新程序的信号)是被屏蔽掉的。出厂的芯片中的boot_serial只检测2K(默认的应用程序起始位置)处是否存在有效的堆栈指针和复位向量,如果有的话则执行应用程序, ...…

查看全部问答>

步进增益放大(含源代码,51勿喷)

0.1v步进,利用DAC0832的倒T型电阻网络…

查看全部问答>