基于arm11处理器S3C6410内核的linux下串口通信实现

发布者:sclibin最新更新时间:2018-12-18 来源: eefocus关键字:arm11  S3C6410  内核  linux  串口通信 手机看文章 扫描二维码
随时随地手机看文章

/*例程目的:通过向内核加载独立按键模块,串口通信模块,编写应用程序,使得当按键按下时,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



关键字:arm11  S3C6410  内核  linux  串口通信 引用地址:基于arm11处理器S3C6410内核的linux下串口通信实现

上一篇:STM32—IWDG看门狗
下一篇:基于S3C6410的ARM11学习(一) 基础知识

推荐阅读最新更新时间:2024-03-16 16:20

玩转USB HID系列:Linux下使用Python开发USB HID
实验环境 ubuntu 16.04 LTS 64-bit python 3 STM32做下位机 开发步骤 安装pyusb 库 pip install pyusb 我们来与HID设备通讯! 我的STM32信息: interface 0 END POINT 0x01: OUT END POINT 0x82: IN 包大小:64 byte 完成功能:PC机向STM32写入2个字节(查询命令) STM32返回5个字节: :数据长度(这里应该为4) - :一个double的电压值的内存形式 import usb.util import usb.core import sys from ctypes import * import
[单片机]
迅为4412开发板Linux驱动教程——编写简单应用调用驱动
Linux驱动教程: http://pan.baidu.com/s/1c0hljUS 编写简单应用调用驱动——头文件 • 打印头文件 – include stdio.h 调用打印函数printf • 应用中调用文件需要的头文件 – #include sys/types.h 基本系统数据类型。系统的基本数据类型在32 编译 环境中保持为32 位值,并会在64 编译环境中增长为64 位值。 – #include sys/stat.h 系统调用函数头文件。可以调用普通文件,目录,管 道,socket,字符,块的属性 – #include fcntl.h 定义了open函数 – #include unistd.h 定义了close
[单片机]
51单片机串口通信介绍
这节我们主要讲单片机上串口的工作原理和如何通过程序来对串口进行设置,以及根据所给出的实例实现与PC 机通信。 一、原理简介 51 单片机内部有一个全双工串行接口。什么叫全双工串口呢?一般来说,只能接受或只能发送的称为单工串行;既可接收又可发送,但不能同时进行的称为半双工;能同时接收和发送的串行口称为全双工串行口。串行通信是指数据一位一位地按顺序传送的通信方式,其突出优点是只需一根传输线,可大大降低硬件成本,适合远距离通信。其缺点是传输速度较低。 与之前一样,首先我们来了解单片机串口相关的寄存器。 SBUF 寄存器:它是两个在物理上独立的接收、发送缓冲器,可同时发送、接收数据,可通过指令对SBUF 的读写来区别是对接
[单片机]
51单片机<font color='red'>串口通信</font>介绍
ARM CPU的软件基础
ARM CPU的软件基础      从8位/16位单片机发展到以ARM?CPU核为代表的32位嵌入式处理器,嵌入式操作系统将替代传统的由手工编制的监控程序或调度程序,成为重要的基础组件。更重要的是嵌入式操作系统对应用程序可以起到屏蔽的作用,使应用程序员面向操作系统级开发应用软件,并易于在不同的ARM核的嵌入式处理器上移植。嵌入式操作系统都具有一定的实时性,易于裁剪和伸缩,可以适合于从ARM7到Xscale各种ARM CPU和各种档次的应用,嵌入式操作系统可以使用广泛流行的ARM开发工具,如ARM公司的SDT/ADS和RealView等,也可以使用开发软件,如GCC/GDB、KDE或Eclipe开发环境,市场上还有专用的开发工具,
[应用]
Linux内核的Nand驱动流程分析
最近在做Linux内核移植,总体的感觉是这样的,想要彻底的阅读Linux内核代码几乎是不可能的,至少这还不是嵌入式学期初期的重要任务。内核代码解压后有250M左右,据统计,有400多万行,而且涉及到了软件和硬件两方面的诸多知识,凭一人之力在短时间内阅读Linux内核代码是根本不可能的,强行阅读可能会打消我们嵌入式学习的积极性,最后甚至可能放弃嵌入式学习,如果真的想阅读内核代码来提高自己水平的话可以等熟练掌握嵌入式以后再回过头来阅读,这样理解也会更深刻,更透彻。 我认为Linux内核移植的初期阶段应该将重点放在分析内核设备驱动上。实际上,Linux内核的移植就是设备驱动的移植,内核本身不会直接访问硬件,是通过驱动程序来间接控制硬件的,
[单片机]
stm32串口通信困扰我两天的一个问题
问题描述:程序“一样”,编译没有问题,但是功能不能实现,不能回显。 说明USART1波特率设置不成功 但USART1初始化程序“没问题”。 1. 朋友认为我的工程建立有问题,但我以前用同一模板建的工程都没有问题。 2. 确认是USART1配置肯定有问题。就把例程中正确的函数USART1_config()中的程序段复制到我写函数相同的位置。把原先我的程序屏蔽掉,再编译--- 下载---- 功能正常。 然后就是将两个程序段逐句主逐字地排除。 反思:为什么会出现这样的程序。 我的编程思想是 例如GPIO口的使用 第一步 定义结构体 第二步 打开相应的时钟线 第三步 对打开的GPIOx输入输出功能配置 第四步 打开该GPIO
[单片机]
stm32<font color='red'>串口通信</font>困扰我两天的一个问题
基于VHDL的串口通信程序设计
本模块的功能是验证实现和PC机进行基本的串口通信的功能。需要在PC机上安装一个串口调试工具来验证程序的功能。 程序实现了一个收发一帧10个bit(即无奇偶校验位)的串口控制器,10个bit是1位起始位,8个数据位,1个结束位。串口的波特律由程序中定义的div_par参数决定,更改该参数可以实现相应的波特率。程序当前设定的div_par 的值是0x104,对应的波特率是9600。用一个8倍波特率的时钟将发送或接受每一位bit的周期时间划分为8个时隙以使通信同步.程序的工作过程是:串口处于全双工工作状态,按动key2,CPLD向PC发送皐elcome"字符串(串口调试工具设成按ASCII码接受方式);PC可随时向CPLD发送0-F
[工业控制]
基于嵌入式ARM-Linux的GPS智能终端设计
GPS智能终端是智能交通系统(ITS系统)的重要组成部分,它将卫星定位技术(GPS)、地理信息系统(GIS)以及无线通信技术融于一身。目前,卫星定位终端通常由8位/16位单片机、GSM/GPRS通信模块、GPS模块、LCD液晶显示器等组成,并且采用液晶部分与主控芯片组分离在两个外壳里的分体式结构。这里介绍一种基于ARM920处理器和嵌入式Linux操作系统,将GPS技术与CDMA网络相结合的嵌入式智能终端并设计。该终端具有将GPS终端的动态位置、时间、状态等信息实时地通过CDMA无线网络链接到控制中心,在具有地理信息处理和查询功能的电子地图上进行显示,并对终端的准确位置、速度、运动方向、终端状态等基本信息进行监控和查询;报警(
[单片机]
基于嵌入式ARM-<font color='red'>Linux</font>的GPS智能终端设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved