精华内容
下载资源
问答
  • 串口接入检测的方法:  如果单片机的串口RX引脚被设置成输入下拉IPD,当串口线接入时...二串口命令解析:以下命令解析的技巧:  2.1只需要设置帧头帧尾,中间部分的16进制就是结构体中的字符串(命令码的字符串...

    一 串口接入检测的方法:

      如果单片机的串口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[] = {
    {"\r\nON\r\n",ZMCOMM_START}, //0D 0A 4F 4E 0D 0A /*命令1*/
    {"\r\nOFF\r\n",ZMCOMM_STOP}, //0D 0A 4F 46 46 0D 0A/*命令2*/
    {"\r\nMODE=1\r\n",ZMCOMM_SPEED}, //0D 0A 4D 4F 44 45 3D 31 0D 0A
    {"\r\nMODE=0\r\n",ZMCOMM_HIGH}, //0D 0A 4D 4F 44 45 3D 30 0D 0A
    {"\r\nO=1\r\n",ZMCOMM_SIGNAL_DEST}, //0D 0A 4F 3D 31 0D 0A
    {"\r\nO=2\r\n",ZMCOMM_SIGNAL_SPEED}, //0D 0A 4F 3D 32 0D 0A
    {"\r\nDEBUG0\r\n",ZMCOMM_DEBUG0}, //0D 0A 44 45 42 55 47 30 0D 0A
    {"\r\nDEBUG1\r\n",ZMCOMM_DEBUG1}, //0D 0A 44 45 42 55 47 31 0D 0A
    {"\r\nMODE=2\r\n",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;
        }
      }
    }

    转载于:https://www.cnblogs.com/jieruishu/p/9854769.html

    展开全文
  • 可以记录多条串口命令,有自动发送功能,帧换行功能,16进制于常规字符发送接收功能。
  • 串口命令解析

    千次阅读 2018-02-08 17:16:08
    就例如AT命令会有很多的返回值,通常都是一下字符串,想从串口中正确的拿到这些字符串,并且所有的命令字符串都不丢失。例如:GETOKlsakOKlsasGETOKlkaslkllOK这是串口发送过来的数据,我们需要寻找的数据是GETOK,...

     串口是流数据,有时候想从串口中得到想要的数据,但是却发现很难处理,因为它没有协议,没有长度。

    就例如AT命令会有很多的返回值,通常都是一下字符串,想从串口中正确的拿到这些字符串,并且所有的命令字符串都不丢失。

    例如:GETOKlsakOKlsasGETOKlkaslkllOK

    这是串口发送过来的数据,我们需要寻找的数据是GETOK,并且里面有2个这样的命令,而且还有很多我们不需要的其它数据。

    你会发现你想命令提取到并且其它数据不丢失,串口依然在来新的数据命令。这时候就需要我们写一个解析命令的程序来有效的解析了。

    因为是开发这样的一个功能,我并没有选择在单片机上开发,我选择先在windows上面测试。

    思路:

     1在主线程把(串口)数据放到一个数组队列里面

     2在子线程解析命令

    需要把上面思想转变到单片机,就是主线程+串口中断

    下面是整个代码:

    // 串口命令解析.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include "windows.h"  
    #include "string.h"
    #include "conio.h"
    char mes_buf[1024]={0};
    int mes_len=1024;
    static int num=0;
    
    char buf1[]="hes";
    char buf2[]="off";
    char buf3[]="on";
    
    
    //寻找子串并移除子串
    int find_str_del(char *mes,char *str)
    {
    	char *p;
    	int str_len=strlen(str);
    		p=strstr(mes_buf,str);
    	//	printf("len:%d",str_len);
    			if(p)
    			{
    				printf("查找到有效指令:%s",p);
    				memset(p,0,str_len);	//查找到的字符清零
    				
    				//数组移动
    				num-=str_len;
    				while(*(p+str_len))
    				{
    					*p=*(p+str_len);
    					p++;
    				}
    				memset(p,0,str_len);	//后位清零
    				return 1;
    			}
    			return 0;
    }
    
    
    //子线程函数    
    DWORD WINAPI ThreadFun(LPVOID pM)    
    {    
            while(1)  
            {  
    			//printf("子线程\n");
    			//Sleep(2000); 
    
    			find_str_del(mes_buf,buf1);
    				find_str_del(mes_buf,buf2);
    					find_str_del(mes_buf,buf3);
    			Sleep(100);
            }  
    }   
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    
    	HANDLE handle = CreateThread(NULL, 0, ThreadFun, NULL, 0, NULL);
    
    	while(1)
    	{
    		//printf("主线程\n");
    		//Sleep(1000);
    		
    		char ch=getch();
    		
    		mes_buf[num++]=ch;
    
    		if(num==mes_len)num=0;
    		
    		
    		printf("主线程输入:%s\n",mes_buf);
    
    		
    
    	}
    
    	return 0;
    }
    
    

    效果:



    我们可以看到,队列里的数据不断的增加,只要发现有我们指令,立即能解析到并且把指令从数据队列里面移除。其它数据还在里面。

    有人会问为什么不直接把其它数据也移除掉,我稍微解释一下,因为其它数据不一定是这样的垃圾数据,有可能串口里面还有其它的

    可用命令。或者其它的有效数据待其它功能解析。 

    这个功能可以引用到很多串口通信的领域。特别是串口控制,AT解析,等等。

    开源使科技进步,就算是微不足道我也要去做。






    展开全文
  • 串口命令字解析”测试

    千次阅读 2018-08-22 18:21:48
    串口命令字解析,多用于设备测试。由生产装备(测试设备)发送命令数据帧给被测设备,被测设备接收命令数据帧并返回相应的参数。通过这些参数,我们可以得知被测设备是否有故障,也可获得被测设备的固件信息等。本...

    实验平台:STM32F103开发板

    串口例程参考:战舰例程

    目录

    前言

    测试过程

    程序设计

    测试代码

    注意事项

    测试结果

    总结


    前言

    串口命令字解析,多用于设备测试。由生产装备(测试设备)发送命令数据帧给被测设备,被测设备接收命令数据帧并返回相应的参数。通过这些参数,我们可以得知被测设备是否有故障,也可获得被测设备的固件信息等。本测试简单设计了几种典型的命令并得到了验证,大家可根据实际情况进行修改。

    测试过程

    命令数据帧格式为0xAA  0x..  0x.. ··· 0x.. 0x55。生产装备(测试设备)由PC代替。通过PC端串口助手发送区域输入命令数据帧,由usart2发送给STM32,STM32解析命令字后,再由usart2把相应参数返回到PC端串口助手接收区域。若接收区域显示内容与解析部分的执行结果一致,说明命令字解析成功。

    程序设计

    1. 接收来自生产装备的命令数据帧,并放入接收缓冲区中
    2. 如果接收到的数据帧的帧头不是0xAA,则为无效数据帧,返回“Error Command!”
    3. 若帧头正确,则进行命令解析。本测试写了4条命令:

    •     若命令数据帧为 0xAA 0x26 0x55, 发一个字节数据, 串口助手接收区域显示 0x26
    •     若命令数据帧为 0xAA 0x66 0x01 0x55, 调用函数(函数参数由命令数据帧提供)并返回结果, 串口助手接收区域显示 02
    •     若命令数据帧为 0xAA 0x97 0x55, 将发送缓冲区中的数据发给PC(缓冲区中的数据可以是自定义的或程序中其他函数的返回值), 串口助手接收区域显示 AA 0E 00 55 00
    •     若命令数据帧为 0xAA 0x0A 0x55, 同上一条, 串口助手接收区域显示 AA 0E 55 00 00 (设计这一条是为了显示“清空缓冲区的必要性”)

    测试代码

    //接收缓冲区命令解析
    while(1)
     {
    	if(USART2_RX_STA&0x8000) //检查已接收完毕
    	{					   
    		if(USART2_RX_BUF[0]!=0xAA)
    		{printf("Error command!!!\n");}//判断第一个元素不是0xAA
    		else 
    		{switch(USART2_RX_BUF[1]) //判断第二个元素是0x26还是0x0A
    			{
                   case 0x26:
    				printf("0x26\n");
    				break;
    				
    			   case 0x66:
    				{
    				 if(USART_GetFlagStatus(USART2, USART_FLAG_TC))//这一句可以避免第一个发送数据丢失
    				 {
    				  USART_SendData(USART2, plus(USART2_RX_BUF[2]));//向串口2发送数据
    				  while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);
    				 }
    				}
    				break; 
    
    			   case 0x97:
    				 { 
    				  Send_BUFF[0] = 0xAA;
    				  Send_BUFF[1] = 0x0E;
    				  Send_BUFF[2] = 0x00;
    				  Send_BUFF[3] = 0x55;
    				  USART2_Send_Data();
    			      memset(Send_BUFF,0,sizeof(Send_BUFF));//发送缓冲区清零
    				 }
    				 break;
    				 
    			   case 0x0A:
    				 {
    				  Send_BUFF[0] = 0xAA;
    				  Send_BUFF[1] = 0x0E;
    				  Send_BUFF[2] = 0x55;       
    				  USART2_Send_Data();
    				  memset(Send_BUFF,0,sizeof(Send_BUFF));
    				 }
    				 break;
    
    				 
    			   default:
    				 break;
    		    }
    	     }
    	 USART2_RX_STA=0;//清空接收标志位
    	 }
     } 

    下面是附加的两个函数:

    //usart2发送数组 
    //发送缓冲区u8 Send_BUFF[MANUF_MAX_BUFF],缓冲区大小为5个字节
    void USART2_Send_Data()
    	{
    	 u8 t;
    	 for(t=0;t<MANUF_MAX_BUFF;t++)
    	 {
    	   if(USART_GetFlagStatus(USART2, USART_FLAG_TC))
    	   {
    		USART_SendData(USART2, Send_BUFF[t]);
    		while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);
    	   }//等待发送结束
    	 }
    	}
    
    
    //加一函数
    u8 plus(u8 a)
       { 
    	u8 b;
    	b = a + 1;
    	return b;
       }

    注意事项

    1. 发送发送缓冲区的数据时,发送完成后,必须清空缓冲区,否则第4条命令将会返回错误信息(AA 0E 55 55 00)。所以,每发送一次, 就要清空一次。
    2. 这里清空缓冲区用的方法是调用memset(buffer, 0, sizeof(buffer)),注意使用时需加头文件string.h

    测试结果

    4条命令的测试结果依次如下图1-4所示

    图1 AA2655
    图1 AA 26 55

     

    AA660155
    图2 AA 66 01 55

     

    AA9755
    图3 AA 97 55

     

    AA0A55
    图4 AA 0A 55

     

    显然,与所设计的结果一致。如此,便实现了串口命令字解析。

    总结

    文中测试代码虽然实现了命令字解析,但自认为是一种笨方法,基于我当前的水平只能写出这些。如果有更好方法,欢迎留言或私信。谢谢~

    以上!

    【声明】本博文为个人学习笔记,仅供参考。转发请注明出处。如发现有误,还请不吝赐教,谢谢!

    展开全文
  • linux串口命令

    千次阅读 2017-06-06 13:04:12
    proc# cat /proc/tty/driver/serial serinfo:1.0 driver revision: 0: uart:16550A port:000003F8 irq:4 tx:103686 rx:76876 RTS|CTS|DTR|DSR|CD 1: uart:unknown port:000002F8 irq:3 2: uart:unknown port:000003...

    proc

    # cat /proc/tty/driver/serial 
    serinfo:1.0 driver revision:
    0: uart:16550A port:000003F8 irq:4 tx:103686 rx:76876 RTS|CTS|DTR|DSR|CD
    1: uart:unknown port:000002F8 irq:3
    2: uart:unknown port:000003E8 irq:4
    3: uart:unknown port:000002E8 irq:3
    4: uart:unknown port:00000000 irq:0
    5: uart:unknown port:00000000 irq:0

    statserial

    # statserial /dev/ttyS0
    Device: /dev/ttyS0
    
    Signal  Pin  Pin  Direction  Status  Full
    Name    (25) (9)  (computer)         Name
    -----   ---  ---  ---------  ------  -----
    FG       1    -      -           -   Frame Ground
    TxD      2    3      out         -   Transmit Data
    RxD      3    2      in          -   Receive  Data
    RTS      4    7      out         1   Request To Send
    CTS      5    8      in          1   Clear To Send
    DSR      6    6      in          1   Data Set Ready
    GND      7    5      -           -   Signal Ground
    DCD      8    1      in          1   Data Carrier Detect
    DTR     20    4      out         1   Data Terminal Ready
    RI      22    9      in          0   Ring Indicator

    stty

    # stty -F /dev/ttyS0 -a 
    speed 115200 baud; rows 0; columns 0; line = 0;
    intr = <undef>; quit = <undef>; erase = <undef>; kill = <undef>; eof = <undef>; eol = <undef>;
    eol2 = <undef>; swtch = <undef>; start = <undef>; stop = <undef>; susp = <undef>;
    rprnt = <undef>; werase = <undef>; lnext = <undef>; flush = <undef>; min = 1; time = 0;
    -parenb -parodd cs8 -hupcl -cstopb cread clocal -crtscts
    -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany
    -imaxbel -iutf8
    -opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
    -isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl
    -echoke
    展开全文
  • 测试串口命令microcom

    千次阅读 2018-08-09 16:02:29
    最后找到一个命令microcom来测试串口的通信,才发现是我板子的这个串口坏了。指导老师说,我们做嵌入式开发的,不能一出问题就想是我们软件出了问题,要先看硬件,硬件没有问题看接线有没有问题,当接线和硬件都没...
  • 关于休眠唤醒的串口命令

    千次阅读 2014-09-11 13:27:40
    休眠唤醒的串口操作命令
  • linux 下串口命令

    万次阅读 2013-07-30 12:45:33
    查看串口是否可用,可以对串口发送数据比如对com1口,echo lyjie126 > /dev/ttyS0 查看串口名称使用 ls -l /dev/ttyS* 一般情况下串口的名称全部在dev下面,如果你没有...查看串口驱动:cat /proc/tty/drivers/serial
  • IIC读写AT24C02代码1——通过串口命令控制R/W,并显示到串口!   主函数 /*----------------------------------------------- IIC编程 1 编写:Louis 邮箱:kaly.liu@163.com 日期:2015.05.25 修改:...
  • 文章目录: 实验要求 代码实现 ...//接收命令变量 //系统时钟切换函数从16M——32M void Set_Clock_32M() { CLKCONCMD &=~0x40; while(CLKCONSTA &0X40) { } CLKCONCMD &=~0x47;
  • 串口工具包依赖 // 串口 implementation 'com.github.licheedev.Android-SerialPort-API:serialport:1.0.1' 1、获取全部串口地址devicePath private String[] mDevices; public void getcuankou(){ ...
  • stty设置串口命令

    万次阅读 2012-09-04 14:32:26
    stty -F /dev/ttyS0 speed 115200 cs8 -parenb -cstopb 115200波特率 8数据位 1停止位 无校验位
  • 在zedboard板子上想要跟pc互传文件的时候竟然发现不支持串口 rz sz命令 真是fuc。。。。。 那自己来添加 首先下载rzsz-3.48.rar 这里已经有人上传了 http://download.csdn.net/detail/opchywen/4939376 ...
  • 在运行的时候,串口输入a,b,c,led灯一直亮,没有变化 ``` #define LED_PIN 1 void setup() { Serial.begin(9600); pinMode(1, OUTPUT); } void loop() { while (Serial.available()) { char abc = ...
  • GRBL二:串口控制命令及代码解析

    万次阅读 多人点赞 2015-06-30 15:59:49
    GRBL二:串口控制命令及参数解析 单片机串口跟电脑连接,测试GRBL串口命令 1.输入:“$”显示如下: $$ (view Grbl settings) //命令“$$”查看GRBL设置 $x=value (save Grbl setting) //保存设置 $H (run ...
  • linux串口相关命令

    2015-07-23 16:19:43
     在开发过程中,用到串口编程,总结一下串口的相关命令。 一,串口概述  在linux中,串口,对应的tty基本都是ttySn(Serial);如果是usb口转串口的基本都是ttyUSBn。  二,命令  a, 显示检测到的系统串口...
  • 串口调试命令

    千次阅读 2017-12-12 14:30:22
    All devices on Unix are mapped to a device file, the serial ports would be /dev/ttyS0 /dev/ttyS1 ... . First have a look at the permissions on that file, lets assume you are using ...
  • 串口调试常用命令

    2013-10-30 15:41:14
    在平常开发过程中,最常用到串口来调试项目,通过打印信息来调试,这样直观,那么就要用到一些常用的命令。通过此文档,让你在开发过程中无烦恼。
  • linux串口查看命令

    万次阅读 2015-12-21 21:51:12
    linux如何查看哪个串口是真实串口,哪个串口是伪串口 1.使用ls -l ttyS*命令显示如下 crw-rw----. 1 root dialout 4, 64 5月 17 02:24 /dev/ttyS0 crw-rw----. 1 root dialout 4, 65 5月 17 02:24 /dev/ttyS1 crw...
  • 因初学GRBL,网上搜集了一些GRBL的资料,怕遗忘,所以转载过来,如有侵权请联系,...单片机串口跟电脑连接,测试GRBL串口命令 1.输入:“$”显示如下: $$(view Grbl settings) //命令“$$”查看GRBL设置 $x=v...
  • linux 串口设置命令

    千次阅读 2019-03-28 20:25:49
    stty -F /dev/ttyS0 -a 显示串口参数 stty -F /dev/ttyS0 ispeed 9600 ospeed 9600 cs8 设置串口波特率 stty -F /dev/ttyS0 ispeed 115200 ospeed 115200 cs8
  • 记录下串口调试命令

    2019-04-27 12:06:39
    记录下正在使用的串口调试命令,防止忘记啦! 1. 查看串口状态: cat /proc/tty/drive/serial topeet@ubuntu:~$ sudo cat /proc/tty/driver/serial serinfo:1.0 driver revision: 0: uart:16550A port:000003F8 ...
  • linux下串口查看命令

    万次阅读 2018-04-18 14:34:02
    1、查看串口是否可用 可以对串口发送数据比如对com1口,echo /dev/ttyS02、查看串口名称使用 ls -l /dev/ttyS* 一般情况下串口的名称全部在dev下面,如果你没有外插串口卡的话默认是dev下的ttyS* ,一般ttyS0对应...
  • linux下串口常用命令

    千次阅读 2016-05-06 14:34:30
    操作系统:ubuntu10.04 前言:  在开发过程中,经常需要使用到串口。  因此要知道物理上连接的串口对应的tty。... 应该要知道这些串口的使用情况如何。...二,命令  a, 查看串口个数,以及这
  • 串行接口

    2019-07-25 17:03:31
    串行接口,简称“串口”,也称串行通信接口(通常指COM接口)。它的作用就是用于通信。只要一对传输线就可以实现双向通信,并可以利用电话线,就能实现单工、半双工、双工三种方式。它的特点是数据一位一位地顺序...
  • 常用的串口调试命令

    千次阅读 2019-05-30 17:59:16
    如何查看打印信息 至于要查看打印信息的内容这个要熟悉代码,其实如果插拔电源有内容输出就表示上电了,其他判断程序跑到哪里都是代码中放入的日志判断的,这个各个平台都...一些好用的命令串口中输入 reboot re...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 119,809
精华内容 47,923
关键字:

串口命令