当前位置: 首页 > article >正文

字符串指令集

字符串指令的格式

在这里插入图片描述
例子1就成功发送了指令 例子2就是发送的字符串有误 查询当前位置就会在附加信息中返回当前座位的坐标
在这里插入图片描述
第一个·指令的参数就是闪灯的两个参数 如第一个示例就是10ms On Time 第二个就是Off Time

使用标准库来接收字符串命令

在这里插入图片描述

字符串指令的接收

在这里插入图片描述
因为一个指令就是一行 所以可以调用PAL库的接口 PAL_USART_ReadLine 读取这个字符串指令 首先需要声明一个数组 就把读到的字符指令放到这个字符数组里面 超时值为0因为在进程函数里
预处理
在这里插入图片描述
因为接收到的指令是字符串所以有\r\n 要把这些无用的信息去掉 在c语言中字符串的末尾为\0代表字符串的结束 所以只需要在字符串倒数第二个位置添加字符\0就可以去除掉没用的信息 使用strlen可以得到字符串的长度
数据的解析
在这里插入图片描述
收到指令后把字符串进行解析 分别是指令的名称和后边的两个参数 首先要分隔开然后把对应的数据存储在对应的变量里面
解析指令名称
在这里插入图片描述
第一个函数接口就是查找字符 char*strchr 第一个参数是要查找的字符串数组 第二个是要查找的字符 如果找到了就返回一个指针指向要查找的字符的位置 如果查找不到就返回0 第二个函数接口就是 strcmp把两个字符串进行比较 如果相等就返回0
在这里插入图片描述
首先ptr指向字符串数组的第一个字符 (char * ptr = cmdline) 然后又定义一个指针指向字符串数组的第一个字符 然后ptr = strchr(cmdline,’ ’)就是要查找字符 空格 ‘ ‘ 然后返回一个指针 = ptr 就是ptr指向要查找的字符 空格在这里插入图片描述
在这里插入图片描述
然后再ptr指向的位置写入\0 就得到了指令的名称 在这里插入图片描述
然后把这个字符数组(只剩下指令名称)和两个指令对比 做对应的动作即可在这里插入图片描述
解析指令参数
在这里插入图片描述
第二个函数接口就是 atoi 就是传入一个字符 就返回这个字符对应的数字 当提取玩指令名称后 ptr来到了图中位置 此时ptr指向一个字符 右上角的程序首先声明了两个指针变量 用来接收字符串指令的两个参数 然后第一个指针指向ptr 也就是第一个字符 然后去搜寻剩下字符串的空格 调用函数strchr(ptr,‘ ’ )使得ptr指向剩余的字符串中的空格 ptr位置如图所示
在这里插入图片描述
然后在prt指向的位置写入\0 然后再向后移动
在这里插入图片描述
arg2指向ptr 此时就把指令字符串分为了三个部分 cmdName字符串数组只有指令名称 SetBlinkParam 第二个字符串数组arg1 只有10 第三个字符串数组只有1000
app_cmd.c

#include  "app_cmd.h"
#include  "stm32f10x_pal_usart.h"
#include  <string.h>
#include "app_blinky_led.h"
#include <stdlib.h>

static PalUSART_HandleTypeDef hUSART;


void App_Cmd_Init(void)
{
		NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
		
		hUSART.Init.BaudRate = 115200;
		hUSART.Init.USARTx = USART3;
		hUSART.Init.USART_WordLength = USART_WordLength_8b;
		hUSART.Init.USART_Parity = USART_Parity_No;
		hUSART.Init.USART_StopBits = USART_StopBits_1;
		hUSART.Init.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
		hUSART.Init.USART_IRQ_PreemptionPriority = 0;
		hUSART.Init.USART_IRQ_SubPriority = 0;
		hUSART.Init.TxBufferSize = 128;
		hUSART.Init.RxBufferSize = 128;
		hUSART.Init.Advanced.LineSeparator = LineSeparator_CRLF;
		PAL_USART_Init(&hUSART);

}
void App_Cmd_Proc(void)
{		
		char *ptr;
		const char*cmdName;//用来存储指令名称
		
		char cmdline [64];
	 if( PAL_USART_ReadLine(&hUSART,cmdline,64,0) > 0)//返回值大于就接收到一行字符串了
	 {
	 
				cmdline[ strlen(cmdline)-2] = '\0';	//预处理 删除行尾的\r\n
				ptr = cmdline;
				cmdName = ptr; //这样cmdName就是只剩下指令名称的数组了
				ptr = strchr(cmdline,' ');
		  
				if(ptr != 0)
				{
						*ptr = '\0';//取值改成\0
						ptr++;
				}
				if(strcmp(cmdName,"SetBlinkParam") ==0 )
				{
						const char *arg1,*arg2;
						//解析第一个参数
					arg1  = ptr;
					ptr = strchr(ptr,' ');
					*ptr = '\0';
					ptr++;
					//解析第二个参数
					arg2 = ptr;
					
					App_BlinkyLED_SetOnTime(atoi(arg1));
					App_BlinkyLED_SetOffTime(atoi(arg2));
					 
					
					//OK\r\n\r\n
					PAL_USART_SendString(&hUSART,"OK\r\n\r\n"); //表示指令执行成功了
				
				} //修改闪灯参数
				else if(strcmp(cmdName,"GetBlinkParam") ==0) 
				{
					//OK\r\nOn=%d,Off=%d\r\n 返回参数
					PAL_USART_Printf(&hUSART, "OK\r\nOn=%d, Off=%d\r\n", App_BlinkyLED_GetOnTime(),App_BlinkyLED_GetOffTime());
					
					App_BlinkyLED_GetOnTime();//获取亮灯时间
					App_BlinkyLED_GetOffTime();//获取灭灯时间
					
				}//获取闪灯参数
				else	//返回错误  ERROR,cmd name not support
				{
					
					PAL_USART_Printf(&hUSART,"ERROR, cmd Name not supported\r\n\r\n");
				
				}
				
				
				 
	 
	 
	 }


}


void USART3_IRQHandler(void)
{
	
		PAL_USART_IRQHandler(&hUSART);
	
}

app_cmd.h

#ifndef  __APP_CMD_H__
#define  __APP_CMD_H__

#include "stm32f10x.h"


void App_Cmd_Init(void);
void App_Cmd_Proc(void);



#endif

http://www.kler.cn/a/162837.html

相关文章:

  • 半导体企业如何利用 Jira 应对复杂商业变局?
  • 阿里巴巴通义灵码推出Lingma SWE-GPT:开源模型的性能新标杆
  • MySQL:CRUD
  • Gsensor加速度传感器数据异常及概率性卡死
  • 解决:WSL2可视化opencv和pyqt冲突:QObject::moveToThread
  • JUC-locks锁
  • 渗透测试工具AWVS的全面解析
  • 计算机方向的一些重要缩写和简介
  • 042:el-table表格表头自定义高度(亲测好用)
  • 硬件开发笔记(十五):RK3568底板电路VGA显示接口原理图分析
  • Docker网络原理
  • vue2 百度地图实现 车在线路上移动 BMap、BMapGL
  • 【页面】表格展示
  • 如何切换用户和更改用户密码
  • Windows核心编程 HOOK
  • 2024山东健博会,济南健康展,5月中国大健康展,健康管理展
  • ubuntu安装tomcat并配置前端项目
  • 虾皮跨境电商网:东南亚领先的电商平台
  • LVS-DR+Keepalived+动静分离实验
  • 对系统的 Go 版本进行升级
  • Python 接口自动化 —— requests框架
  • IPoIB在国产并行系统上的实现与优化
  • 16mic圆形麦克风阵列电路与声源定位算法设计
  • 【Java数据结构 -- List和ArrayList与顺序表】
  • 实现:切换页面切换标题,扩展 vue-router 的类型
  • 【PyTorch】多层感知机