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

STM32F103实现类似SHELL命令调试

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

& U) w0 w5 f8 m6 U1 X命令结束符是回车  这个主意一下 ,不然就是未识别命令,我估计很多人会用SecureCRT 这类软件,这个是可以用的,自己配置一下就OK
, \+ O7 V1 u# n& R# Q1 R9 O( `; \1 p
& j1 R+ W5 \% l& A4 L1 X
: T3 ]  r; U6 D2 K' t- l" ~* N

1 O' O$ _' e4 P  |  `5 e
7 Z, v* o4 q$ Y7 a

' S& p, a8 V' Q- I代码解析概要:
6 n- N" y8 E: c* _0 q1 E; x: g5 t中断接收处理: 这段代码的方式大家应该陌生,收到之后缓存
" L/ Z0 B; |0 G* g0 `int i;
; E* d8 h* e3 {1 l( ]1 r5 m+ wunsigned char ch;4 e9 K2 X1 I& H3 P! V
void USART1_IRQHandler(void); ~% X) l/ H) }3 J9 J" C
{            
% L! ~6 U- ~, z. v; _+ d: P          ch = getchar();* B( ^' u* m4 o6 [, R/ O
                  if(ch!=0). i) d" @  _0 j5 c4 r8 W3 }- p# p
                        {) S8 d* B1 s! a
                                cmd[i++] = ch;% j5 U7 w% m# [4 h, H, r
                                if(i>CMD_MAX_LENGTH)- G( [. y" o4 Y5 h
                                {
- e; g8 U6 D, Z                                        i = 0;
1 u4 X' e/ |$ R) S: W8 \- u2 ?' Z9 }' h4 M                                }                        : @' {) I, t9 L" s
                                if((cmd[i-1]=='\n')&&(cmd[i-2]=='\r'))4 C  u. T9 C. ^) _( g
                                {" k2 Z; f! Z; v4 p% a
                                        cmd[i-1]=0;8 }- b, z) q+ e, f7 B
                                        cmd[i-2]=0;       
# Q. ~+ s2 q" W; d6 H6 ]* p                                        i=0;
" _8 t3 U% ?, F1 i& q. a9 V                                        flag=1 ;
2 d! k4 N) x3 f/ L: s6 T) J; A1 N5 s+ \/ Z. o
# }/ S+ I( A. X5 T5 }6 C* l! c7 {
                                }        9 L4 M% I- x3 P6 J1 `
                  }6 |9 ]3 Y" t3 n; {1 |
}* k# e7 v* S6 m5 R, n: F
( Q9 G8 c. w( a
重定向C语言函数' d. {) m! r' k5 u1 d
int fgetc(FILE *f)8 F7 j5 r9 q- q7 s) y% {" x7 V; [8 u
{
# C" r* _" r) E2 C! }$ T- g        while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
9 G/ }: e( L4 s1 [- W" T        return (uint8_t)USART_ReceiveData(USART1);: T2 [& A/ t4 e4 c
}  k( d9 i( L, K5 M% i& \
int fputc(int ch, FILE *f)! @6 v/ R0 u, f8 e
{
- h# j5 D$ q, @4 L1 Y4 J        USART_SendData(USART1, ch);: V; Y6 S5 P4 }0 z( D1 s
    while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET );+ [( I( O# A: Z; X( O- Q* Y+ [
        return ch;
" y" w! {8 Q7 m% ~
  C8 T$ L/ c/ Q! ~

4 R; M4 y7 m! [( }}
5 x4 `7 e5 E( M, t$ [3 Y5 ^

9 ^& m+ K/ K8 K. Z0 `
! G  Y) G( i% N4 H

3 b3 g9 R$ d4 b! O  \+ j& @0 s9 q命令缓存
) U0 M! ]- I' [3 A* j1 J( m3 h* z' {9 q; s) l8 p  c; @
' W* w' P. ]- R7 b0 Z/ E
tCmdLineEntry g_sCmdTable[ ] =+ P. U, c& y: y
{
8 B" F$ m4 i; O! E; G5 s/ S    {"help",        Cmd_help,"\t\tisplay list of commands\r\n" },# u- P9 }" e. B$ A
    {"?",           Cmd_help,"\t\tisplay list of commands\r\n" },
4 `5 C( L) t0 {! x2 x3 f    {"getbaud",     Cmd_get_baud,"\t\t:Get the current baud rate\r\n"},5 p* r  P- J6 F$ T# @
   {"getstate",    Cmd_get_state,"\t:Get the current flag state\r\n"},
  k6 k/ Y% v- F7 J0 G7 ~: }# u   {"setstate",    Cmd_set_state,"\t:Set the current flag state \r\n"},
7 ]) T" Y) m2 q; P* \7 K, h    {"resetmcu",    Cmd_MCU_Reset,"\t:Reset MCU\r\n"},1 p" ]* T7 g. E( S8 N
    {0,0,0}
* U  p" W1 V. t};! t7 t4 ~7 r# w
8 c6 U; L8 Z  u% S

& r7 G+ ?: V$ B; V& `
) N* B# f/ e, g3 n( B

. Q0 M4 a; O% Y) `( Z3 G; A3 O这个 格式就是 输入的命令   函数名字   提示符
+ e. ]# H) k3 c自己往里面加就可以了
9 @0 \$ ^8 F4 T. N至于这些函数自己实现就行了
1 a, F# q- {" X6 kint Cmd_get_baud(int argc, char *argv[])$ y  l- E- _+ p% |
{2 {1 ?9 U! R+ a+ n
        uint32_t baud=115200;: _7 i0 U7 U2 A, u  e( O/ ?2 e9 r
    uint8_t APP_Data[8]={ 0xAA,0x01,0x00,0x00,0x00,0x00,0x00,0x55};//»ñȡЭÒéÊý¾Ý
( `9 L* a- n) D9 X# z        uint8_t i;
$ f# U: A% e% z    printf("baud= %d\r\n",baud);" O! Q3 r( G4 `  X; K# A' B
    for(i=0;i<8;i++)
% q+ ~' p8 q' U    {
6 h) z4 G, p( l- s& j1 [        printf("APP_Data[%d]=%-d\t",i,APP_Data);5 M( Y) L* N  j8 H' U. ]* @1 \
    }
5 P; t/ |$ O4 E% W( R( _2 r& U    return 0;! Z4 ^2 w9 c5 r) N
}
8 G2 N) ]3 c4 _( E" K, J* f( b  O- T( g2 H. y1 H& c

- s- ~* Y' G  }1 e" o: _* q就这样:' g$ {0 i( P% N8 ^3 r! ~- o' `' G
注意  很多和我一样的菜鸟不玩linux 可能对函数int Cmd_get_baud(int argc, char *argv[]) 不是很懂,建议百度 秒懂4 b  `7 o0 {* G4 ~$ d; g
% R2 c  j, H: j; }
* t& ~& g2 s- j" W  t4 \
命令解析部分  可以不用管 看这个函数  主要就是提取解析 结束符和 上面红色函数的参数,其实我也不是很懂,有能力的可以详细解释一下. r; j5 B9 C* X$ `; @$ m; T, q

% g/ M* v. A" p7 ^5 Q
' o, H1 x" C( |8 R. Q9 A
int CmdLineProcess(char *pcCmdLine), O( `  z6 q' E* i: C

7 O* M1 i. ]4 p" a0 j) L; Q  l
' _5 N% [' b& ]. `4 e3 Q* M) o! W
main函数/ I+ ]8 X; X# {* Z9 W* ~$ Z
while(1)
! I* s9 _& `; y$ P6 T{
# |! @% f6 N1 }. a        if(flag)
) [8 |8 S/ H* m8 H) H; }1 R                {
  N7 {2 [5 a  L) z                        if(CMDLINE_BAD_CMD == CmdLineProcess(cmd))$ ?! A0 W4 S+ S- K. `  n, m
                        {
9 E$ h9 {% g6 X+ {/ u                                printf("unkown command, please input \"help\" \n\r");
+ R3 H8 A4 B2 z4 o                        }
  X& o+ ]5 i/ b- K" M$ ?                        flag=0;
/ K; X  L2 `) s) W. `* O5 F/ ^                       
; h; X- N. n" C' p: Y& c9 W                }
9 X' L# z% U7 n- |9 R. i
3 X7 h  ^4 \$ v- R/ k: Z- F4 Y9 w9 B9 Z/ ?. `) B
& ~9 G6 F4 L& q$ L. Q9 B, t/ U' Z
}6 Z6 B3 J, O: q
打工搞成 ,记得选Use MicroLIB 不然可能会死机哦  如果自己修改过不用这个库的话   就不必要做了* I% Z7 S1 l' A9 U  T+ r
                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【】出现了表情 这个是字符格式个表情重复了 ,不惜在意5 m& r3 @* J$ z1 ]- A; C9 I' M8 ^2 k
源代码没有问题!
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
9 _& V2 b2 ]' N( ?, f建议也把工程文件发上来!!!
* H& h! B1 R- h5 X6 R/ P
提交了啊 ,欢迎下载
寂寞,点燃一支烟 回答时间:2018-7-13 14:06:48
creep 发表于 2018-7-12 13:503 Q& x! f* ]' c2 n5 h
支持!!!
" H. Q  D1 \1 v: A1 A- ^/ ?( `+ q
谢谢大神
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+ Z! d3 s5 u. K. a* m2 {
我有移植UBOOT的命令行到407

# p- g( i- m: A; X5 q欢迎分享
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版