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

STM32F103实现类似SHELL命令调试

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

( U  [6 x# f( _% \5 E5 F8 \4 \8 Y1 M命令结束符是回车  这个主意一下 ,不然就是未识别命令,我估计很多人会用SecureCRT 这类软件,这个是可以用的,自己配置一下就OK* s* P" p  W  \. K! {. I

8 A9 R2 G$ v7 i, E
/ e: N$ v% M: v$ o/ Q- }% o% ?
" ~! [' f, Y: F3 I- D$ [
* Y; x/ ?8 R% p0 G* j% H! Q
) _5 G! }+ f2 ~6 R' `- l

, i* [$ U: }: B: M代码解析概要:
4 Q# l3 G" s' R7 T3 E/ d中断接收处理: 这段代码的方式大家应该陌生,收到之后缓存
$ R  K; F1 ]$ eint i;. T% g8 {. R. S$ x: W! U
unsigned char ch;
9 t1 s& Z/ K6 j% ~. p: A- g" y: Pvoid USART1_IRQHandler(void)
3 [1 T) ~4 v) a' T9 e( V& J4 Q{            
8 \) ?" _' d7 K+ T+ n4 F          ch = getchar();
7 K' V/ {5 m4 X+ Y3 n                  if(ch!=0)
) G/ d6 b" N3 w0 H& }                        {
4 H$ |5 j6 u% A1 y& L5 _* g: g                                cmd[i++] = ch;" G( B8 c( s, d3 M( {( Q
                                if(i>CMD_MAX_LENGTH)
# v2 n; s7 p! {" b# L5 J. K                                {8 @- A1 J+ T. u- r
                                        i = 0;
% i% \6 v2 K; Y7 `' C2 w& N                                }                       
' h& h! N/ G! g1 M9 T                                if((cmd[i-1]=='\n')&&(cmd[i-2]=='\r'))
/ a+ s( H9 M6 K1 U/ m                                {
0 \7 }9 O- W* d; a- z+ t: w. c! L; Y                                        cmd[i-1]=0;5 ^7 V4 O& `) q: A2 w: b# e$ m. w
                                        cmd[i-2]=0;       
. [2 k4 T! I$ L+ v" y- z/ M" v, ^                                        i=0;
# `7 \9 @, R" u7 B1 m                                        flag=1 ;, s% f- k" w3 w8 j- t" d5 L* ^. o
4 I2 U8 T5 T# u" ^% C. V; e& z. P

% Z' |+ |2 b7 H" L                                }        4 t( c+ X5 }1 L+ M
                  }
# D- l- J, n  c1 j4 | }# ^6 Q; F; f. F# N1 ]8 R: U
) C2 D3 `& }' m9 k
重定向C语言函数/ k* B; Q' Z1 I2 j) Z+ Y2 q+ ]
int fgetc(FILE *f)- z5 f# a  O3 V
{
( ~8 ^( Z" y$ S+ W. y        while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
6 ^9 |9 F! p% w! T# _, s7 H* T        return (uint8_t)USART_ReceiveData(USART1);
( e. m* B" D, Z; `0 Q5 L% S1 W}% D6 \) k8 `- \( K
int fputc(int ch, FILE *f)
$ U/ \  W6 J* I) G1 {$ U8 F( N{! L* ~7 ~; S3 K* O
        USART_SendData(USART1, ch);
4 F9 j6 p9 ]/ b) V! ~* W: B8 m    while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET );
; \1 n5 T% F( {( m2 T. p        return ch;. H; F" z8 r; K$ G# a

* h- G( O0 \8 f6 R8 e- r1 ?
8 I) u. D  o# D. p* E- t* _/ D; [
}5 S% w* m. M1 C5 c% i% K

7 w* U% S3 ?0 Q
- c9 [( X% g0 e/ R! J3 ]$ c0 L7 @# B
7 `( p# M7 ?0 A
命令缓存* x' z2 V* ]) n; ?' Q. c! X
9 q- ~' D( e3 D) }5 i; c8 R
3 K5 {7 @1 I3 y7 j+ f
tCmdLineEntry g_sCmdTable[ ] =
% v+ N8 p2 m8 C- T5 o" h{
/ m# j. G4 l. Z* \1 P    {"help",        Cmd_help,"\t\tisplay list of commands\r\n" },
2 n3 e6 p/ z* S: \    {"?",           Cmd_help,"\t\tisplay list of commands\r\n" },
0 f, H* P  ]! r- f( m/ \/ S& x    {"getbaud",     Cmd_get_baud,"\t\t:Get the current baud rate\r\n"},
' V+ Q) s8 k6 e( C9 C0 r   {"getstate",    Cmd_get_state,"\t:Get the current flag state\r\n"},' f2 r1 b  s% V! r+ |' d& L
   {"setstate",    Cmd_set_state,"\t:Set the current flag state \r\n"},4 G' Z+ W4 |7 E; M- _& ~# b9 }, N) ]
    {"resetmcu",    Cmd_MCU_Reset,"\t:Reset MCU\r\n"},
( K( |7 ~! x/ R! Z  t9 x2 p    {0,0,0}
9 {4 I# t- o: q) P/ A2 c. N" l};% R; i: F) V. [
* U. ]2 E6 G2 w+ L  G: S
0 {! {/ V  x' r% J6 \5 P

& b% G( U2 z! J. [" g1 z4 s/ m
. C  B( P( t, q! k这个 格式就是 输入的命令   函数名字   提示符
5 i& r7 U# H* _# w+ f7 Y4 i自己往里面加就可以了/ {# f3 L0 [! U( s5 }' |- X
至于这些函数自己实现就行了6 F$ G( @% T( T6 w) M5 Q: c( B/ x2 l
int Cmd_get_baud(int argc, char *argv[]): |0 O' K* n, P" {( F
{
6 Z$ f& Y8 Q) M) Q        uint32_t baud=115200;
9 B' ?7 O& }9 T& z0 v    uint8_t APP_Data[8]={ 0xAA,0x01,0x00,0x00,0x00,0x00,0x00,0x55};//»ñȡЭÒéÊý¾Ý
+ j6 s! m" S2 P( X9 K" m, d        uint8_t i;  w' W1 z7 }  ~. L& s
    printf("baud= %d\r\n",baud);' \& w! q) y; R; X
    for(i=0;i<8;i++)9 d* `' H* v8 O- U  M
    {# |& i8 P: ?  ~  d) E3 W
        printf("APP_Data[%d]=%-d\t",i,APP_Data);# _. {8 n+ I, [5 m
    }
5 S! k, ^% v  ~! m: w7 B% r, W    return 0;7 C% H; p. a. ^' u, a8 X; w
}4 z( {/ x7 W- T) l4 T
$ e8 X  t6 e7 A. l9 F; f
5 E$ ?  Y7 A- v! \% i6 y
就这样:/ U! S. L3 E, B) D8 m. x( v4 T8 _% S( P
注意  很多和我一样的菜鸟不玩linux 可能对函数int Cmd_get_baud(int argc, char *argv[]) 不是很懂,建议百度 秒懂
$ W) h5 Z! X- R* D& {) u; r8 C8 G6 E5 s2 |$ g5 `* s
9 `+ S. V  J9 }' i& p! q
命令解析部分  可以不用管 看这个函数  主要就是提取解析 结束符和 上面红色函数的参数,其实我也不是很懂,有能力的可以详细解释一下  ~& m0 f' N" S

) K( L* b8 Y6 n- E" O% E) H
  h; \; h8 d7 V' u% S9 g
int CmdLineProcess(char *pcCmdLine)) ]0 j: ~# m, @# F: e# w1 G
$ ~3 q( _( I4 R9 X

# ~$ k% x2 L  C1 q8 L/ c$ Vmain函数, }8 s9 x- a5 t2 d" t
while(1)) d6 S+ V! i( a) d$ Z. w
{! q: [. e6 f" ~! w
        if(flag)
3 j9 u6 g, x* @( Z( v                { , T( N  H9 e2 d# G6 g% ]
                        if(CMDLINE_BAD_CMD == CmdLineProcess(cmd))
0 q4 r$ Y& q5 H. c, V% d% N# E                        {' O$ s+ |- u5 g4 @/ O
                                printf("unkown command, please input \"help\" \n\r");0 U- Z+ p$ F. P: T3 p9 ?+ D; T
                        }# l2 k$ I3 B9 j% P* A$ `: U% j  i
                        flag=0;* \3 Z/ G+ p8 t- Z
                        ' J4 \9 P& T1 B. A# C6 [
                }
7 I' v$ |7 f( y" ?, w3 s3 W" Y" u3 ]  y* a) C4 @, ^7 S! I
- v; I8 w* N( B" Z+ L/ m9 i7 G" u
+ S3 Z" ?% w' N9 k7 ?# ~
}/ M" F( h! w( g. H: O7 X/ U
打工搞成 ,记得选Use MicroLIB 不然可能会死机哦  如果自己修改过不用这个库的话   就不必要做了" Y1 g& L: q9 p* w; [8 Y
                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【】出现了表情 这个是字符格式个表情重复了 ,不惜在意2 n% q9 Y3 c& @' W' g
源代码没有问题!
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
# B& m9 B- L+ E. w( f. ~建议也把工程文件发上来!!!

7 D# p; \' ?, z% {. ?0 H: Y提交了啊 ,欢迎下载
寂寞,点燃一支烟 回答时间:2018-7-13 14:06:48
creep 发表于 2018-7-12 13:50
, M  a% Q5 m! _6 _1 a) k( F支持!!!
; l, A/ N$ ?  r9 j' a; i. l
谢谢大神
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:278 ^+ T0 d5 b+ `/ u9 V: W
我有移植UBOOT的命令行到407
5 n2 R: n$ Y  |  x4 c9 b9 f
欢迎分享
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版