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

STM32F103实现类似SHELL命令调试

[复制链接]
寂寞,点燃一支烟 发布时间:2018-7-12 10:29
楼主也是参考别人整理的,主要是为了和我一样的菜鸟 进行 CTRI+C  CTRL+V 做的准备  让你一分钟就移植成功,后续我再做在操作系统TreeRTOS下的,当前别人可以做一下 方便我们学习,不BB了,看效果图:
  S  h! ?  b* B" Q' ]$ ]9 s3 ?, h

) \: M$ {: h. r+ D; m+ W8 g5 T命令结束符是回车  这个主意一下 ,不然就是未识别命令,我估计很多人会用SecureCRT 这类软件,这个是可以用的,自己配置一下就OK
8 V; z( U% x, A( b4 U* h. l6 L. x& G3 ]4 q. X. g7 i% N

: e5 k' `5 H- O4 c2 I
' C8 `! N( v- g$ Q0 J) I: s5 k9 o; D; @6 e/ U

2 l0 [0 B4 W- u) Q  y! a$ \4 b

. D; B8 f  E- B0 G- i+ G5 U- h$ m代码解析概要:
" R- p0 H% Q3 p6 ~+ y中断接收处理: 这段代码的方式大家应该陌生,收到之后缓存
% A1 T( y1 G6 |) W) K1 t9 Yint i;8 u% P6 a' g% I- O' j. X4 l/ X; _0 d
unsigned char ch;
9 x, D: p9 @% J& e5 svoid USART1_IRQHandler(void)" Q5 W3 T. y3 t" a: \9 U) x. J
{            
7 S3 v7 X1 q9 i" b! v7 N          ch = getchar();
6 |  ~$ q3 C5 D- x                  if(ch!=0)
; V! I4 y  H  w& k. H, H$ `                        {
. d- V4 G+ z2 \; z+ b                                cmd[i++] = ch;
% |1 f( Q' H8 M                                if(i>CMD_MAX_LENGTH)( M: ?, X0 K# [: z& c- n
                                {( |  p$ g8 f' L  [( \. Z' X
                                        i = 0;; t) Y1 v% D6 P$ N: w' T: ^
                                }                        $ y5 j  o" e" M5 }) L8 V$ s
                                if((cmd[i-1]=='\n')&&(cmd[i-2]=='\r'))
% t* E& @0 W  C& K  ]" Y6 c                                {
6 p" u  c3 N# }7 h4 x! l                                        cmd[i-1]=0;
) E4 B: T7 f3 C% V$ z/ R2 e                                        cmd[i-2]=0;          B) `. _& T2 B8 m
                                        i=0; - @) @! P1 A2 v9 n# n$ N
                                        flag=1 ;. J! H3 f) G9 r5 ?. D, X

  A/ Y3 `* v1 m9 J2 Z; d( y; r+ |: p) @
: @! `1 ~% P5 b; w8 n# U% ^
                                }       
/ l; `6 o; M) J8 P! R9 ?, t3 `                  }. x( V7 A" r, L0 X' K; o
}
- o5 u  R9 j( h. S$ w6 A  A* p8 Q( ?0 U; o7 m7 o$ f) b" o5 ]6 C+ _
重定向C语言函数
1 C% y! l; i( U! |% x6 t% i# lint fgetc(FILE *f). M/ j$ _2 `% S# P! ^
{) j9 j6 @: }! R0 f; D0 v4 u$ {9 v. Z. K
        while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);  l9 Q: W0 j) T2 Y( a4 K7 Q& y
        return (uint8_t)USART_ReceiveData(USART1);
0 H+ [( I; {9 n1 R" a}
& T  i# T% w9 sint fputc(int ch, FILE *f)
0 ~1 ~- w/ y# y{2 B/ ?; P( h* ~8 W9 \1 b+ i, m) Z
        USART_SendData(USART1, ch);
4 H0 d0 A. z: K; O% Y7 Q    while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET );& e, ~6 E6 j5 E! h" R1 ~' f
        return ch;
& s; L. A* ]* P/ y1 h0 ?: h4 s
' h5 @/ R: k2 }6 q
7 \- c2 U0 Y8 y  I: b# s* Z7 R
}$ v& y3 k4 `4 \' J

: |8 K; c/ b! Q' y+ H7 v- Y# Y, c' K( Z+ h& U: c

4 j( R4 T& n$ y$ c" n命令缓存  A( A  P/ l9 J! k
( i1 h& n& `. q2 i" r/ F
/ M6 \% s7 |, Y/ ?# O
tCmdLineEntry g_sCmdTable[ ] =/ `* ?4 y! Y2 {2 c% a
{
" [- X" O0 W2 c! f8 ]' J: {    {"help",        Cmd_help,"\t\tisplay list of commands\r\n" },
4 f# C( A# _. }    {"?",           Cmd_help,"\t\tisplay list of commands\r\n" },+ s$ {+ b/ [% K% g1 f" H, u5 q
    {"getbaud",     Cmd_get_baud,"\t\t:Get the current baud rate\r\n"},* l) I1 z+ t1 h/ D: s: y
   {"getstate",    Cmd_get_state,"\t:Get the current flag state\r\n"},
8 l, Y, I8 p6 @; l( P* O* j& R# Q   {"setstate",    Cmd_set_state,"\t:Set the current flag state \r\n"},4 S) Z% }+ S+ M+ b
    {"resetmcu",    Cmd_MCU_Reset,"\t:Reset MCU\r\n"},3 Y5 L( O0 a# x# U/ k5 }5 w; ?! k
    {0,0,0}
. O3 l$ _, z, i6 B};- J: v$ i$ n& f& {

' d/ v0 h* \8 l* b2 o5 }8 b  H7 ?# N. k; \1 O, f: x
) ?) {5 z0 X& _2 B, Y
- F, ?" n6 X9 _! E/ T
这个 格式就是 输入的命令   函数名字   提示符3 n( t9 Z- p# m/ n9 R# j
自己往里面加就可以了
9 {% d) y& [: ]5 Q/ `至于这些函数自己实现就行了  s: J! b# k% [0 U
int Cmd_get_baud(int argc, char *argv[])
9 ]# ]$ z1 V1 i8 c- e3 J{' Z+ E4 X+ F% R4 ^- B7 s: D# t# w
        uint32_t baud=115200;
1 ^; a9 u* Z8 |) F9 \    uint8_t APP_Data[8]={ 0xAA,0x01,0x00,0x00,0x00,0x00,0x00,0x55};//»ñȡЭÒéÊý¾Ý7 w7 S  z5 D- _, E. j: _1 m& @9 J
        uint8_t i;, g8 O. I. D6 h3 h: _; `% `
    printf("baud= %d\r\n",baud);
2 @  l% R% N% J    for(i=0;i<8;i++)
: s4 V" x1 `. y0 T6 E9 s    {
9 C5 @8 R$ |, U' M) w8 ^" U4 Q/ \        printf("APP_Data[%d]=%-d\t",i,APP_Data);
1 @9 J% C9 g6 K2 z7 Q( c9 |    }
4 `6 ~+ x( Y- k+ `    return 0;4 }& O& i5 U! l) b  L% o
}
" a: |. |; \0 y+ W! D" M$ U) E0 D; S; |. X$ J6 j- s, j

" c8 _' y8 B# H: K9 c; n5 }就这样:
7 s9 [) q) d4 {  Z: D注意  很多和我一样的菜鸟不玩linux 可能对函数int Cmd_get_baud(int argc, char *argv[]) 不是很懂,建议百度 秒懂% n8 l6 i4 `5 ~4 `& M' C6 o# {  P
' k: e8 u+ Q$ V; Y* h/ R

) u% X' ~7 R* ?8 @' ]+ w. d命令解析部分  可以不用管 看这个函数  主要就是提取解析 结束符和 上面红色函数的参数,其实我也不是很懂,有能力的可以详细解释一下
5 q8 y, d1 O1 d
: h5 Y! J3 m1 k9 Q' U

) R6 [; ~# U& p5 K6 q$ Sint CmdLineProcess(char *pcCmdLine)
9 C  B! h% f; g4 ~$ v+ T5 u
+ \: C+ J4 P( {; m9 g
  V) Z& Z7 K7 _* a4 c7 r- W- R
main函数) `3 u% G* i; T: O2 w8 x' `+ F
while(1). K% u, e, ?% j& c
{2 \' a6 k/ Z7 m5 V. h
        if(flag)& r5 \' Q+ L3 J1 m7 c, R" u
                { ) F" |5 v9 I% r' Y) T: c, w
                        if(CMDLINE_BAD_CMD == CmdLineProcess(cmd))4 W& A8 w/ C) }/ l/ R
                        {
7 A$ U9 X1 B( @4 i6 t/ N                                printf("unkown command, please input \"help\" \n\r");  t# u1 \6 A' j) s0 E9 D' G; t  Z
                        }7 ]# D1 |- |' t7 F0 z
                        flag=0;( d5 {% i  i/ I- J6 k0 `
                        7 }! R$ o4 R  G; F, G
                }
, Z6 y( k6 ?) F) O+ Q. i: T. G. D1 G8 H0 i1 ^: |4 Q
# ]7 e1 U+ H# i4 ?' r8 p

8 ]! l* z9 ?& u% t% \3 ?' |}1 C- t6 o1 S6 {7 p. Z3 H2 f& G
打工搞成 ,记得选Use MicroLIB 不然可能会死机哦  如果自己修改过不用这个库的话   就不必要做了
7 D3 \/ I; S3 f6 n; b0 _                SHELL.rar (1.57 MB, 下载次数: 182)
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【】出现了表情 这个是字符格式个表情重复了 ,不惜在意
1 m/ u  c% {: T/ O) c: [4 M源代码没有问题!
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
$ \4 z6 d* E+ g  }% X+ e* k建议也把工程文件发上来!!!

, V% @6 S, s) X提交了啊 ,欢迎下载
寂寞,点燃一支烟 回答时间:2018-7-13 14:06:48
creep 发表于 2018-7-12 13:50
. ~( T0 l. Z6 d8 x- `% q9 X5 h8 C5 E支持!!!

$ \# ?$ \* X2 z4 r9 }" S 谢谢大神
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:271 a- {8 r* j; `) U3 f/ H8 ]4 j" G
我有移植UBOOT的命令行到407
" }& |& g  N3 b. C& |% e7 v
欢迎分享
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版