苏州网站设计制作公司,seo是什么岗位的缩写,ui设计需要学历吗,国家工商信息公示系统字符串指令的格式 例子1就成功发送了指令 例子2就是发送的字符串有误 查询当前位置就会在附加信息中返回当前座位的坐标 第一个指令的参数就是闪灯的两个参数 如第一个示例就是10ms On Time 第二个就是Off Time
使用标准库来接收字符串命令 字符串指令的接收 因为一个指令就是…字符串指令的格式 例子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 strchrcmdline’ ’就是要查找字符 空格 ‘ ‘ 然后返回一个指针 ptr 就是ptr指向要查找的字符 空格 然后再ptr指向的位置写入\0 就得到了指令的名称 然后把这个字符数组只剩下指令名称和两个指令对比 做对应的动作即可 解析指令参数 第二个函数接口就是 atoi 就是传入一个字符 就返回这个字符对应的数字 当提取玩指令名称后 ptr来到了图中位置 此时ptr指向一个字符 右上角的程序首先声明了两个指针变量 用来接收字符串指令的两个参数 然后第一个指针指向ptr 也就是第一个字符 然后去搜寻剩下字符串的空格 调用函数strchrptr‘ ’ 使得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.hstatic 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\nptr cmdline;cmdName ptr; //这样cmdName就是只剩下指令名称的数组了ptr strchr(cmdline, );if(ptr ! 0){*ptr \0;//取值改成\0ptr;}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\nPAL_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.hvoid App_Cmd_Init(void);
void App_Cmd_Proc(void);#endif