参考别人整理的,主要是为了和我一样的菜鸟 进行 CTRI+C CTRL+V 做的准备 让你一分钟就移植成功,后续我再做在操作系统TreeRTOS下的,当前别人可以做一下 方便我们学习,不BB了,看效果图:
命令结束符是回车 这个主意一下 ,不然就是未识别命令,我估计很多人会用SecureCRT 这类软件,这个是可以用的,自己配置一下就OK
代码解析概要:
中断接收处理: 这段代码的方式大家应该陌生,收到之后缓存
- int i;
- unsigned char ch;
- void USART1_IRQHandler(void)
- {
- ch = getchar();
- if(ch!=0)
- {
- cmd[i++] = ch;
- if(i>CMD_MAX_LENGTH)
- {
- i = 0;
- }
- if((cmd[i-1]=='n')&&(cmd[i-2]=='r'))
- {
- cmd[i-1]=0;
- cmd[i-2]=0;
- i=0;
- flag=1 ;
- }
- }
- }
- 重定向C语言函数
- int fgetc(FILE *f)
- {
- while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
- return (uint8_t)USART_ReceiveData(USART1);
- }
- int fputc(int ch, FILE *f)
- {
- USART_SendData(USART1, ch);
- while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET );
- return ch;
- }
- 命令缓存
- tCmdLineEntry g_sCmdTable[ ] =
- {
- {"help", Cmd_help,"ttisplay list of commandsrn" },
- {"?", Cmd_help,"ttisplay list of commandsrn" },
- {"getbaud", Cmd_get_baud,"tt:Get the current baud ratern"},
- {"getstate", Cmd_get_state,"t:Get the current flag statern"},
- {"setstate", Cmd_set_state,"t:Set the current flag state rn"},
- {"resetmcu", Cmd_MCU_Reset,"t:Reset MCUrn"},
- {0,0,0}
- };
复制代码
这个 格式就是 输入的命令 函数名字 提示符
自己往里面加就可以了
至于这些函数自己实现就行了
- int Cmd_get_baud(int argc, char *argv[])
- {
- uint32_t baud=115200;
- uint8_t APP_Data[8]={ 0xAA,0x01,0x00,0x00,0x00,0x00,0x00,0x55};//»ñÈ¡ÐÒéÊý¾Ý
- uint8_t i;
- printf("baud= %drn",baud);
- for(i=0;i<8;i++)
- {
- printf("APP_Data[%d]=%-dt",i,APP_Data);
- }
- return 0;
- }
复制代码
就这样:
注意 很多和我一样的菜鸟不玩linux 可能对函数int Cmd_get_baud(int argc, char *argv[]) 不是很懂,建议百度 秒懂
命令解析部分 可以不用管 看这个函数 主要就是提取解析 结束符和 上面红色函数的参数,其实我也不是很懂,有能力的可以详细解释一下
- int CmdLineProcess(char *pcCmdLine)
- main函数
- while(1)
- {
- if(flag)
- {
- if(CMDLINE_BAD_CMD == CmdLineProcess(cmd))
- {
- printf("unkown command, please input "help" nr");
- }
- flag=0;
-
- }
- }
复制代码
打工搞成 ,记得选Use MicroLIB 不然可能会死机哦 如果自己修改过不用这个库的话 就不必要做了
|