zoukankan      html  css  js  c++  java
  • 串口接入检测与串口命令解析

    一 串口接入检测的方法:

      如果单片机的串口RX引脚被设置成输入下拉IPD,当串口线接入时,因为与RX对接的是对方的TX(复用推挽),测试来读RX的话就为高电平,就可以更改模式,提醒单片机有串口接入!!!然后初始化串口将RX配置成浮动输入,就可以利用串口进行收发了。

    二串口命令解析:以下命令解析的技巧:

      2.1 只需要设置帧头帧尾,中间部分的16进制就是结构体中的字符串(命令码的字符串提示)

           2.2解析:先解析帧头帧尾(有效数据才放入字符串),然后将接收的数据强制类型转换成字符串,与结构体数组中的定义的每条命令字符串进行匹配,匹配成功就输出对应的命令码。

     

    if(au8Buf[u8Length - 2] == 0x0D && au8Buf[u8Length - 1] == 0x0A)
    {
      const struct SCmd {
        const char *m_szCmd;
        uint8 m_u8Cmd;
      } asCmd[] = {
    {" ON ",ZMCOMM_START}, //0D 0A 4F 4E 0D 0A /*命令1*/
    {" OFF ",ZMCOMM_STOP}, //0D 0A 4F 46 46 0D 0A/*命令2*/
    {" MODE=1 ",ZMCOMM_SPEED}, //0D 0A 4D 4F 44 45 3D 31 0D 0A
    {" MODE=0 ",ZMCOMM_HIGH}, //0D 0A 4D 4F 44 45 3D 30 0D 0A
    {" O=1 ",ZMCOMM_SIGNAL_DEST}, //0D 0A 4F 3D 31 0D 0A
    {" O=2 ",ZMCOMM_SIGNAL_SPEED}, //0D 0A 4F 3D 32 0D 0A
    {" DEBUG0 ",ZMCOMM_DEBUG0}, //0D 0A 44 45 42 55 47 30 0D 0A
    {" DEBUG1 ",ZMCOMM_DEBUG1}, //0D 0A 44 45 42 55 47 31 0D 0A
    {" MODE=2 ",ZMCOMM_DEGREE}, //0D 0A 4d 4f 44 45 3d 32 0D 0A
    };
      for(uint8 u8Index = 0; u8Index < sizeof(asCmd)/sizeof(asCmd[0]); u8Index++)
      {
        const struct SCmd *psCmd = &asCmd[u8Index];
        uint8 u8Length = strlen(psCmd->m_szCmd);
        if(strncmp((const char*)au8Buf,psCmd->m_szCmd,u8Length) == 0)
        {
          uint8 u8Cmd = psCmd->m_u8Cmd;
          this->m_pListener->bOnZMComm(u8Cmd);
          break;
        }
      }
    }

  • 相关阅读:
    实时控制软件设计-读书笔记
    1月9号
    第一组咖啡机器人部分图形设计
    《构建之法:现代软件工程》阅读笔记
    《实时控制软件设计》第三周作业
    实时控制软件设计第二次作业
    《实时控制软件设计》团队项目个人总结
    《实时控制软件设计》团队项目第三天工作日志
    《实时控制软件设计》团队项目第三天工作日志
    《实时控制软件设计》团队项目第二天工作日志
  • 原文地址:https://www.cnblogs.com/jieruishu/p/9854769.html
Copyright © 2011-2022 走看看