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

STM32F103实现类似SHELL命令调试

[复制链接]
寂寞,点燃一支烟 发布时间:2018-7-12 10:29
楼主也是参考别人整理的,主要是为了和我一样的菜鸟 进行 CTRI+C  CTRL+V 做的准备  让你一分钟就移植成功,后续我再做在操作系统TreeRTOS下的,当前别人可以做一下 方便我们学习,不BB了,看效果图:
* H# c3 X" M7 F' i
* N9 l" X% b7 M8 ?4 a7 P3 ^* U' d3 {
命令结束符是回车  这个主意一下 ,不然就是未识别命令,我估计很多人会用SecureCRT 这类软件,这个是可以用的,自己配置一下就OK
! g% L+ ]# x+ d* ^+ z' b
( \4 o# H; H0 c9 z% B/ \2 _
- u* Z/ o3 K, t0 _+ m2 m

; \' e  C. x8 z2 {- F" r+ V5 U. G
5 O% q8 ~# [6 f3 n+ ?' \
7 }/ B' f: [# o" |4 r& Y
" k7 f( s4 ]8 K: _! Z( {  ]
代码解析概要:
) @9 _# @" }8 C中断接收处理: 这段代码的方式大家应该陌生,收到之后缓存
$ u& C( F) y3 x( W2 M" kint i;
5 M$ b0 M5 @: G! nunsigned char ch;1 r5 V' h$ n, H& `1 n
void USART1_IRQHandler(void)0 w$ u- O* C/ U2 d0 X9 {
{            9 e! T! M( @/ ]2 P/ T
          ch = getchar();
/ u6 ^* H( A# K5 c2 K% D7 a                  if(ch!=0)2 X- M, x/ z! v% e' Q2 J5 @
                        {$ l! W6 p, f  W/ Q9 `
                                cmd[i++] = ch;& j* V7 i9 y- Z( k, B% ^7 q
                                if(i>CMD_MAX_LENGTH)
- F$ L  e, ~4 N                                {, [# r4 {; c0 A" L" A
                                        i = 0;" {( B7 r3 q$ l
                                }                       
/ T; z- F3 G4 f. L4 K# U3 X" \                                if((cmd[i-1]=='\n')&&(cmd[i-2]=='\r'))! h* M0 @; @3 z! Z6 _+ E
                                {/ J% T' _5 t5 M3 E% c( o2 r
                                        cmd[i-1]=0;! J5 {( \: Y- U+ o: ?* l
                                        cmd[i-2]=0;       
# h6 g* ]  {6 {. S                                        i=0;
; W' I# B4 j+ D1 \2 [0 V% [8 C                                        flag=1 ;8 c& }- o. u5 l
+ V9 F* b7 B2 {1 h
7 n  Q/ g5 S$ E& A+ ^
                                }        # s. b5 W' ?) ]! H* F5 f' j
                  }
1 e/ {# c1 G9 f }  `- J( T" K1 |1 A) ?
) u! E% ?! q. n& I: h
重定向C语言函数
$ Q- x# t5 U# b5 l5 n+ d, f6 n1 \% Rint fgetc(FILE *f)
$ m  ?% P; E' f# _{2 ], r  L) z+ L! o
        while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
3 V; _+ ]9 I/ z  u        return (uint8_t)USART_ReceiveData(USART1);
4 Z' v* }0 J$ I, c+ n) L0 Z}/ l& r) E8 r# b: N4 i, ?+ b/ T  p
int fputc(int ch, FILE *f): _* X' J, v, ~/ `( q! v' \4 V, x% h
{
+ ^/ y# U$ N8 o/ E* y0 m        USART_SendData(USART1, ch);
) p. I' Y) J! |1 }7 c    while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET );. }" g+ O0 F/ M( [3 Y) I
        return ch;% W9 W" R# o) z0 D
0 H+ j8 s- I) Y) A" X
  U# {& D" i& |
}0 X, S% g1 \7 j4 S. G
" }/ v- i# F  [  H0 R0 Y
2 B: P, y  b$ Y

6 M& {, D$ a! S6 q3 @# b" O命令缓存# C1 D" G: E3 ^; m" Z
" O. H( k2 s, Z. a

) P3 r0 j- \# r* GtCmdLineEntry g_sCmdTable[ ] =8 Q2 a# S( O$ x' [- X
{
0 ~3 [# d; t- m" N0 ?3 o    {"help",        Cmd_help,"\t\tisplay list of commands\r\n" },( h0 q! q8 `1 {  d7 A+ r
    {"?",           Cmd_help,"\t\tisplay list of commands\r\n" },
4 G: ]7 F0 }7 m6 m    {"getbaud",     Cmd_get_baud,"\t\t:Get the current baud rate\r\n"},
2 c2 M, ]$ |# C5 H1 T5 P2 m% U   {"getstate",    Cmd_get_state,"\t:Get the current flag state\r\n"},( p0 }/ Y5 N0 G1 x
   {"setstate",    Cmd_set_state,"\t:Set the current flag state \r\n"},
" ?; u$ M3 G- b7 _1 a) L    {"resetmcu",    Cmd_MCU_Reset,"\t:Reset MCU\r\n"},) {& t- V, V4 S5 c! U+ O, }; B
    {0,0,0}
6 O, v: I+ b6 |};
6 I* F  y+ |" q  P8 S, E. |" n, L( ^: G" K7 M' @) s2 _+ G

  E6 I1 a& P& `2 I, L& |' a: E

3 D" w$ Z  @) p
! j. N: u7 ~6 b9 q1 V3 k5 ~这个 格式就是 输入的命令   函数名字   提示符, k% }9 V! c6 w% `) ~7 q
自己往里面加就可以了
) j: f  w2 q: x$ A至于这些函数自己实现就行了8 L; e2 @5 @% p, D+ H) q, y$ b
int Cmd_get_baud(int argc, char *argv[])
# _" A8 A0 n3 e! k& H{; Z( S; A4 \% Q1 Z: g
        uint32_t baud=115200;
- e' A) X" s$ t) r! c    uint8_t APP_Data[8]={ 0xAA,0x01,0x00,0x00,0x00,0x00,0x00,0x55};//»ñȡЭÒéÊý¾Ý
; P/ N0 y7 v" P  V& V        uint8_t i;4 y/ P4 ~% {6 T% ?  ~; c. p
    printf("baud= %d\r\n",baud);
/ O4 t% V% \$ ~9 ?    for(i=0;i<8;i++); Y. z  @9 G' h3 R7 c
    {
2 d& C, b( k8 j! c* t% n        printf("APP_Data[%d]=%-d\t",i,APP_Data);
  G; \  l7 f) f5 Y" T) F    }2 s9 u* o* g5 m% P4 l; R
    return 0;
7 a0 W% g# x. f0 y/ g; A}0 z2 m7 V- c0 m" X( y, U7 o0 \7 b
1 A' e" p9 v6 T' }+ A9 V4 n
+ w9 {7 n/ R# ~" l: b. {9 B
就这样:
' B' V: @0 L7 p- Z' u3 K* T% A注意  很多和我一样的菜鸟不玩linux 可能对函数int Cmd_get_baud(int argc, char *argv[]) 不是很懂,建议百度 秒懂4 _6 s- A" ~* W

- w& D. o: }, @% s- m6 A
: U0 f# X5 L9 E% \) R3 z6 a' @
命令解析部分  可以不用管 看这个函数  主要就是提取解析 结束符和 上面红色函数的参数,其实我也不是很懂,有能力的可以详细解释一下4 ]$ l1 \' D& K

  w: A- h1 y8 N7 c( M5 ~" [
" i) k, I, F& n% y6 U& d8 _. _8 n
int CmdLineProcess(char *pcCmdLine)
1 l, r5 e! e+ X5 Y# L2 p, J1 |4 r7 S: i6 L; n0 s% k
/ r1 P1 z2 X4 M
main函数
& m. `& d" I9 D" |1 P' b' }, Awhile(1)" F2 @+ L( S! x8 ~% k" t* }
{/ W0 G9 ]8 S2 ]& Y) n: u% Q4 J
        if(flag)
9 f, K: ?! {$ q. ^                {
( n' G4 @  P' J, A* g                        if(CMDLINE_BAD_CMD == CmdLineProcess(cmd))5 C" [( v+ }1 E# z4 g& K1 _& V
                        {2 R1 i; h& v; m# E
                                printf("unkown command, please input \"help\" \n\r");
$ T" G- U, C' v# q; I                        }
4 C4 u8 R+ m) a" P% Y' X( ]                        flag=0;
( {1 D8 k3 K+ H                        1 ~0 E% [* H, W7 L
                } 3 K- e+ ]: U  i6 K* D" L
& i5 h! Y6 H$ L" o8 w

1 d: O5 I& p% a5 X4 {, J

# y, Y+ h/ V' x) X$ Z}- m& o; L4 \9 J2 `3 p& p1 k, g
打工搞成 ,记得选Use MicroLIB 不然可能会死机哦  如果自己修改过不用这个库的话   就不必要做了# ], x/ d# z/ C; U
                SHELL.rar (1.57 MB, 下载次数: 183)
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【】出现了表情 这个是字符格式个表情重复了 ,不惜在意3 r  [  I0 \* K& e% f- h
源代码没有问题!
MrJiu 回答时间:2018-7-12 11:03:20
建议也把工程文件发上来!!!
creep 回答时间:2018-7-12 13:50:16
支持!!!
andey 回答时间:2018-7-12 17:28:00
提示: 作者被禁止或删除 内容自动屏蔽
西点钟灵毓秀 回答时间: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
3 U6 s! j3 S- K9 L8 k" d建议也把工程文件发上来!!!

3 W5 K! I; }4 O2 F5 @8 t提交了啊 ,欢迎下载
寂寞,点燃一支烟 回答时间:2018-7-13 14:06:48
creep 发表于 2018-7-12 13:50! C$ c( O. K2 G! _5 o
支持!!!

- N) v+ a4 R% ?, d+ N' G8 _ 谢谢大神
wujique 回答时间:2018-7-14 18:27:41
我有移植UBOOT的命令行到407
zero99 回答时间:2018-7-16 17:11:53
赞一个
寂寞,点燃一支烟 回答时间:2018-7-25 09:25:38
huangxuejia-292 发表于 2018-7-14 18:27
; V1 ], @+ K6 u" r我有移植UBOOT的命令行到407

) e) I) h% W% V欢迎分享

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版