
楼主也是参考别人整理的,主要是为了和我一样的菜鸟 进行 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,"\t\t ![]() {"?", Cmd_help,"\t\t ![]() {"getbaud", Cmd_get_baud,"\t\t:Get the current baud rate\r\n"}, {"getstate", Cmd_get_state,"\t:Get the current flag state\r\n"}, {"setstate", Cmd_set_state,"\t:Set the current flag state \r\n"}, {"resetmcu", Cmd_MCU_Reset,"\t:Reset MCU\r\n"}, {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= %d\r\n",baud); for(i=0;i<8;i++) { printf("APP_Data[%d]=%-d\t",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\" \n\r"); } flag=0; } } 打工搞成 ,记得选Use MicroLIB 不然可能会死机哦 如果自己修改过不用这个库的话 就不必要做了 ![]() |
源代码没有问题!
提交了啊 ,欢迎下载
欢迎分享