你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F103实现类似SHELL命令调试

[复制链接]
寂寞,点燃一支烟 发布时间:2018-7-12 10:29
楼主也是参考别人整理的,主要是为了和我一样的菜鸟 进行 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\tisplay list of commands\r\n" },
    {"?",           Cmd_help,"\t\tisplay list of commands\r\n" },
    {"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 不然可能会死机哦  如果自己修改过不用这个库的话   就不必要做了
                SHELL.rar (1.57 MB, 下载次数: 171)
baud.png
CMD.png
help.png

评分

参与人数 2 ST金币 +12 收起 理由
creep + 10 很给力!
MrJiu + 2 赞一个!

查看全部评分

1 收藏 3 评论11 发布时间:2018-7-12 10:29

举报

11个回答
寂寞,点燃一支烟 回答时间:2018-7-12 10:32:00
提交了之后发现  那个tCmdLineEntry g_sCmdTable【】出现了表情 这个是字符格式个表情重复了 ,不惜在意
源代码没有问题!
MrJiu 回答时间:2018-7-12 11:03:20
建议也把工程文件发上来!!!
creep 回答时间:2018-7-12 13:50:16
支持!!!
andeyqi 回答时间:2018-7-12 17:28:00
顶一下
zts329547875 回答时间:2018-7-12 20:02:13
bucuo 不错不错
anobodykey 回答时间:2018-7-12 21:41:46
感谢楼主分享
寂寞,点燃一支烟 回答时间:2018-7-13 14:06:27
MrJiu 发表于 2018-7-12 11:03
建议也把工程文件发上来!!!

提交了啊 ,欢迎下载
寂寞,点燃一支烟 回答时间:2018-7-13 14:06:48

谢谢大神
huangxuejia-292 回答时间:2018-7-14 18:27:41
我有移植UBOOT的命令行到407
12下一页

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版