嵌入式学习笔记之串口编程

一、串口的概念

   1.在GEC6818的开发板上有很多串口,包括基本串口(9针)和拓展串口(4针)

   2.开发板上的串口线和电脑相连,作用:控制终端

   3.在开发板的右上角,有几个拓展串口,作用:用于控制外部传感器

   4.什么时候会用串口?

      开发板引脚资源有限,当需要接入外部传感器的时候,就需要串口通信

      

二、串口的术语?

   RS232 RS485 TTL UART 串口 COM口  (TX RX GUN VCC)

   

   1. RS232 RS485 TTL ----》物理层的电气特性 ----》高低电平的电压范围

             低电平      高电平

       TTL:   0V           5V

     RS232:  +3V~+15V    -15V~-3V        

     RS485:  +2V~+6V     -6V~-2V

    

   2.UART  ----->串口通信协议

     RS232 RS485 TTL  ----》无论你基于何种电气特性,都要遵循一个协议

    

     一般而言,有两种协议

       1.同步通信 1%

       2.异步通信 99%

    

   3.串口  COM口 ----》物理连接的样式标准

     USB接口

     9针串口

     4针串口

    

   4.TX RX GND VCC  ----->串口名字

    

     GND  串口低电平

     VCC  串口高电平

    

     TX    发送数据  transmission

     RX    接收数据  recvive

   

     实现串口A和串口B之间通信

    

     A  ----------------- B

            

        VCC ----------- VCC

        TX  ----------- RX   串口A给串口B发送信息     

        RX  ----------- TX   串口B给串口A发送信息

        GND ----------- GND  

    

三、串口通信协议

   

    1.同步通信    -----》要求收发的双方使用同步时钟

    2.异步通信      -----》虽然不要求时钟相同,但是要求频率要同步

    

    1)所谓频率 ----》每个单位时间内能接受的数据大小

      发:1秒10字    接收:1秒10字  ----》时间可以不一样

      

    2)既然我们选择异步通信,接收方:发送方的数据何时能到达?

        异步通信做法:

           1.自动规定一个空闲电平,比如是高电平  ----》数据没有到达

           2.1位起始位(数据和空闲电平刚好相反,代表数据即将到达)

           3.5位到8位数据位代表字符

           4.1位停止位(恢复空闲电平)

           5.不需要奇偶校验

    

     基本串口的设置:

         

        协议:serial

        端口:COMX

        波特率:115200    ----》频率

        数据位:8

        奇偶校验:无

        停止位:1

    

          --------------》绝大部分的设备都是用异步通信

    

四、串口编程

   

   在linux下,一切设备皆文件,串口也是文件。

 

    crw-rw----    1 root root 247,   0 Jan  1  1970 ttyGS0 ---》基本串口

    crw-rw----    1 root root 247,   1 Jan  1  1970 ttyGS1 ---》拓展串口1

    crw-rw----    1 root root 247,   2 Jan  1  1970 ttyGS2 ---》拓展串口2

    crw-rw----    1 root root 247,   3 Jan  1  1970 ttyGS3 ---》拓展串口3

 

      open("/dev/ttyGS2");

      例子:串口2给串口3发信息

 

       1.打开串口文件

        int send_fd=open("/dev/ttyGS2",O_RDWR | O_NOCTTY);

        int recv_fd=open("/dev/ttyGS3",O_RDWR | O_NOCTTY);

        

        O_NOCTTY //使得该串口脱离终端的控制,因为已经有基本串口去控制终端了

                 If  pathname refers to a terminal device—see tty(4)— it will not

                 become the process's controlling terminal even  if  the  process

                 does not have one.

 

       2.初始化串口  ----------》详细配置参考:课件(串口编程.ppt)

        int init_tty(int fd)

        {

            //1.保存原先串口配置

            

            //2. 设置原始模式

            

            //3.激活本地连接和接收使能选项

            

            //4.设置波特率

            

            //5.设置数据位

            

            //6.设置奇偶校验

            

            //7.设置一位停止位

            

            //8.设置等待时间

            

            //9.清空串口缓冲区

            

            //10.激活配置

            

            return 0;

        }

 

        3.读写串口

         读写串口操作和读写普通文件一样,使用 read()和 write()函数即可,如下所示:

            write(fd, buff, strlen(buff));

            read(fd, buff, BUFFER_SIZE)

 

      开发板,串口1给串口发送消息(TX和RX要反接)----》不需要连接vcc和GND

              串口1对应的是con2

              串口2对应的是con3

              串口3对应的是con4

              

        注意:如果发送方使用fgets写入,那么接收方必须用sizeof计算接收的大小才能打印。      

              

              

     编译命令:arm-linux-gcc example.c -o example -lpthread

    

五、蜂鸣器模块

    gec6818_beep.c  ----->蜂鸣器的驱动源码

    gec6818_beep.ko ----->蜂鸣器的安装包

 

    提示:

      1.先看下gec6818_beep.c

         cmd  设置蜂鸣器的状态 0 ---on   1----off

 

      2.在6818平台安装蜂鸣器驱动

          2.1  查看驱动   lsmod

            rtl8723bu_wifi 1810467 0 - Live 0xbf021000 (O)

            x6818_humidity 2475 0 - Live 0xbf01d000 (O)

            stepmotor 4256 0 - Live 0xbf018000 (O)

            relay 1244 0 - Live 0xbf014000 (O)

            led 1593 0 - Live 0xbf010000 (O)

            gec6818_beep 1551 0 - Live 0xbf00c000 (O) ----》蜂鸣器的驱动

            gas_drv 2257 0 - Live 0xbf008000 (O)

            dc_motor 1802 0 - Live 0xbf004000 (O)

            buttons_drv 2882 0 - Live 0xbf000000 (O)

                      

          2.2  卸载驱动 rmmod  驱动名

          

          2.3  安装驱动 insmod 驱动文件

               首先将驱动文件下载到开发板

            gec6818_beep 1551 0 - Live 0xbf227000 (O)

            rtl8723bu_wifi 1810467 0 - Live 0xbf021000 (O)

            x6818_humidity 2475 0 - Live 0xbf01d000 (O)

            stepmotor 4256 0 - Live 0xbf018000 (O)

            relay 1244 0 - Live 0xbf014000 (O)

            led 1593 0 - Live 0xbf010000 (O)

            gas_drv 2257 0 - Live 0xbf008000 (O)

            dc_motor 1802 0 - Live 0xbf004000 (O)

            buttons_drv 2882 0 - Live 0xbf000000 (O)

 

      蜂鸣器的驱动路径:/dev/beep

       #include <sys/ioctl.h>

 

       int ioctl(int d, int request, ...);

 

   ================================================

六、串口实例应用 ----GEC-RFID

                       发送命令    响应命令       回应命令

   1.RFID的工作状态: gec6818   -----》RFID--------》gec6818

 

       -----》串口使用中tx和rx一定要RFID相连

       

   2.串口应该发送什么内容给RFID

    

      1.请求命令字   -----》检测卡是否在附近

      2.如果检测卡在附近,再次发送防碰撞命令字给RFID

 

   3.请求命令字和防碰撞是如何组成的

    帧长

    FrameLen

    包号/命令类型

    SEQ/CmdType

    命令/状态

    Cmd/Status

    信息长度

    Length

    信息

    Info

    校验和

    BCC

    帧结束符

 

   检测附近的卡

   FrameLen CType Cmd  Length Info  BCC   ETX

     0x07   0x02  0x41 0x01   0x52  算法  0x03

 

    状态 (Status): 0——成功,其它——失败

 

 

 

    

    

    

    

    

    

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TheWanderers

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值