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

STM32F103实现类似SHELL命令调试

[复制链接]
寂寞,点燃一支烟 发布时间:2018-7-12 10:29
楼主也是参考别人整理的,主要是为了和我一样的菜鸟 进行 CTRI+C  CTRL+V 做的准备  让你一分钟就移植成功,后续我再做在操作系统TreeRTOS下的,当前别人可以做一下 方便我们学习,不BB了,看效果图:* g) s" N& z! l8 Y, r
$ |: }) x% v/ I8 r
命令结束符是回车  这个主意一下 ,不然就是未识别命令,我估计很多人会用SecureCRT 这类软件,这个是可以用的,自己配置一下就OK
1 }% K' w% M2 i0 p7 B% P# ?2 ^( b7 \
6 L! X& M+ [& r0 l6 u: o

/ D- E  b7 Z3 w- I7 y3 R4 J& a9 A* X( J
6 z" D, t; I& `( }% \
* i9 M! l( N3 Z. J
代码解析概要:
6 y( V9 B9 h+ x1 R: M中断接收处理: 这段代码的方式大家应该陌生,收到之后缓存. l( _8 e7 e3 {5 O; f4 X) K
int i;
2 Z( w1 k: ]$ N/ [unsigned char ch;$ C! k* j2 ^) [) `9 R. C
void USART1_IRQHandler(void)  U' K5 T! s" F% r0 r) Y* i/ \
{            
+ Q3 Z- S3 w4 _          ch = getchar();
; t# d0 ~" `3 U4 u( ?                  if(ch!=0), h7 R" O  X* H7 E
                        {1 v7 F7 t( n8 n" {
                                cmd[i++] = ch;
8 `& {6 D. y; I2 Q, F* H                                if(i>CMD_MAX_LENGTH)$ H$ p2 T7 [$ c4 L) k/ ]1 B
                                {7 v$ K% p, Q2 N4 Y  t, I
                                        i = 0;) \! x$ A8 E. ~6 u9 T6 j' h& D+ E+ C
                                }                        ( @7 C" }8 e; W! F! s
                                if((cmd[i-1]=='\n')&&(cmd[i-2]=='\r'))3 ~. l& U& C4 X5 a
                                {
9 l2 g# ]9 n) L2 [* }8 ?( [                                        cmd[i-1]=0;2 Z9 ]: v. g3 r6 b; j1 t8 H
                                        cmd[i-2]=0;       
, d. Y5 O$ I1 A3 x( x% J                                        i=0; , \9 `5 D4 u4 G" h, r
                                        flag=1 ;
3 Q& S  o. A6 d& M% _# u' L' a1 Y" b( }' ^* s2 l' L* B
6 U$ X7 `! ~$ m0 z
                                }        7 [/ U! {  R$ u& b0 p
                  }# G  c3 b! h5 K% T* P7 j, E
}$ v7 m5 A: j7 D* [8 N
- l  c/ [2 L1 S: [+ m
重定向C语言函数
) I. }; _5 j7 P8 z2 Jint fgetc(FILE *f)
. u. s( F' Q/ d% W& B# H{/ v/ G+ }6 |5 ^
        while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
9 W, r* t' O4 I+ f3 I        return (uint8_t)USART_ReceiveData(USART1);
( L8 w; B) y2 S: j+ G}
/ z+ m" c5 Y( t- q0 Q% ]int fputc(int ch, FILE *f)7 R1 D6 t8 [2 v, W
{
. r- b1 T6 U! w! y# m        USART_SendData(USART1, ch);
' `0 w, B2 }# n/ e4 Y: W    while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET );
, e, _' x0 r. }( S        return ch;1 R* f+ R- Z8 `" O: ^$ ?
0 W1 f8 k4 c7 N. }

; b" w  H: ~# u% N. i5 @; ^3 l}
$ M: l& {* i% P% J# [$ {2 K6 t& i

2 G" O6 x( G( k, {- g" {/ |, g+ ?  b: t5 N  a
  Y6 B* B8 o6 A  Y; y$ X
命令缓存
5 D4 {9 v. Z3 s' Y- e7 L* X5 u1 m

9 M5 D: _! j1 `! Z, R' m/ KtCmdLineEntry g_sCmdTable[ ] =/ Z7 ], b& r) g/ o! N; ~- i' B3 g# k) k
{4 c, b8 S4 V6 U9 z5 V" V# ]9 y
    {"help",        Cmd_help,"\t\tisplay list of commands\r\n" },' M: E' f  E* S0 K( }6 I
    {"?",           Cmd_help,"\t\tisplay list of commands\r\n" },) p( O: Q1 w! X) ~  f
    {"getbaud",     Cmd_get_baud,"\t\t:Get the current baud rate\r\n"},- }" @0 X( Q+ X8 M2 c1 @" y
   {"getstate",    Cmd_get_state,"\t:Get the current flag state\r\n"},( l1 V$ L- z3 C5 Z  a" h
   {"setstate",    Cmd_set_state,"\t:Set the current flag state \r\n"},# E( J5 F6 |! {
    {"resetmcu",    Cmd_MCU_Reset,"\t:Reset MCU\r\n"},) P! q) Y: w1 P: q
    {0,0,0}
7 I3 N0 ~  M7 k. B  W};+ m4 L$ n, C5 a  |/ P
- s* |# w7 F  N1 f% I' i

+ _0 u2 O+ D" l4 K4 ~7 t' r
$ Q+ x+ a; V, @

; K6 x$ f& [2 W! X. |这个 格式就是 输入的命令   函数名字   提示符
1 x6 K( x6 Q0 Q+ u% g( V4 C" J6 ?自己往里面加就可以了
2 B; T: W6 k- p1 m+ d) p至于这些函数自己实现就行了$ L6 S0 c) ]& Y5 G! A
int Cmd_get_baud(int argc, char *argv[])
2 L$ T4 N0 [+ i" j{
/ v1 f4 c* L, y* O- m( @( n, D/ Y        uint32_t baud=115200;
# L0 ^9 V! L4 }/ N9 R9 {    uint8_t APP_Data[8]={ 0xAA,0x01,0x00,0x00,0x00,0x00,0x00,0x55};//»ñȡЭÒéÊý¾Ý4 P: N8 a* p5 u8 X- z
        uint8_t i;  w1 v( C& M- B7 u2 C  c/ x' U, u
    printf("baud= %d\r\n",baud);! j* V3 E1 w) A" W7 V0 B
    for(i=0;i<8;i++)
9 I2 W; ~/ W9 x) f    {
$ o7 g$ r' p3 O3 a        printf("APP_Data[%d]=%-d\t",i,APP_Data);1 ?- P! D% P$ j: Y4 T
    }
8 X$ E( v6 `: D" l    return 0;5 j9 _: h. W0 T/ p- T. C: G7 C% @
}
: m6 N8 J9 e* u7 Q8 C" f1 O
2 t/ V, k7 @7 Y0 H! s

0 R% P( g, J3 w) o6 H就这样:
9 K. d: N4 E2 X% H; t  T% U注意  很多和我一样的菜鸟不玩linux 可能对函数int Cmd_get_baud(int argc, char *argv[]) 不是很懂,建议百度 秒懂
1 u+ z6 @2 e7 Q  c8 [
# [! g3 w  W* k% M1 y
, u! b) w3 E9 ?. a" V* p5 E$ ~
命令解析部分  可以不用管 看这个函数  主要就是提取解析 结束符和 上面红色函数的参数,其实我也不是很懂,有能力的可以详细解释一下& O$ @6 X. C& c1 B# ~# e
7 k! a0 v0 h& x: Z# J! z/ _

9 e; {% {  @% o8 `6 z( u2 rint CmdLineProcess(char *pcCmdLine)! Q& i7 U& u6 b" H

, f# N; J8 j9 M, K& }

4 I- _: |0 p( n3 Y7 h8 ~4 Xmain函数
5 m' I/ A! b9 s9 q$ Z/ V' |while(1)
9 d  a% J6 X  S  d! h{
$ E/ e* r' j6 z3 N1 J        if(flag). G4 v' c- Y% D& Q5 D
                {
4 k0 ?$ o8 b/ P, {) R3 ?. ^                        if(CMDLINE_BAD_CMD == CmdLineProcess(cmd))  K( ~( R/ R' m) ?8 r& Z! P% n
                        {2 a6 p3 E- \4 n/ C* c/ r
                                printf("unkown command, please input \"help\" \n\r");
' m) r0 j, G) O, N, i' Y                        }
. [4 B* T  u2 W7 r                        flag=0;$ N; R+ F3 a: N0 ~
                       
: H7 x! J& S+ \% S* k                }
/ D, g. R- a7 p. F2 V% p
) ^9 K2 _/ I1 c" I9 u/ j
# A) B. M" s, ^) L0 P  b1 q
- z* T/ S) t4 _7 m# Z8 i2 L* b
}, e6 q% X' i' @& m2 R8 f# A) K
打工搞成 ,记得选Use MicroLIB 不然可能会死机哦  如果自己修改过不用这个库的话   就不必要做了
- X! M+ m3 G/ ?6 s& @  |4 h                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【】出现了表情 这个是字符格式个表情重复了 ,不惜在意/ w6 Y, k2 `" t. R3 R0 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
& V8 K9 j  I0 |. {9 _建议也把工程文件发上来!!!

/ p, A7 t7 A% l, a0 u+ ]" x% m提交了啊 ,欢迎下载
寂寞,点燃一支烟 回答时间:2018-7-13 14:06:48
creep 发表于 2018-7-12 13:50; D6 t. q8 j  ]( _
支持!!!
( P' V/ |' C0 X5 \0 ?5 ^
谢谢大神
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:279 H6 @7 j8 n. d: m, |' J4 h4 X0 g
我有移植UBOOT的命令行到407
9 i: [* y: ^! r$ C" z$ c* y
欢迎分享
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版