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

STM32F103实现类似SHELL命令调试

[复制链接]
寂寞,点燃一支烟 发布时间:2018-7-12 10:29
楼主也是参考别人整理的,主要是为了和我一样的菜鸟 进行 CTRI+C  CTRL+V 做的准备  让你一分钟就移植成功,后续我再做在操作系统TreeRTOS下的,当前别人可以做一下 方便我们学习,不BB了,看效果图:* l! y3 v# q6 k9 @6 _8 t$ u" `4 J4 L
* c  n$ @, i% r1 l; Y
命令结束符是回车  这个主意一下 ,不然就是未识别命令,我估计很多人会用SecureCRT 这类软件,这个是可以用的,自己配置一下就OK; ^7 O: C7 e! f: k% J; i
- V, C" l1 _  O( `
& E; ^4 Q+ \! j4 Y9 ?8 x9 X

4 J  o1 V( }6 V( p& @# P- Z/ W8 M; ]1 g5 ^' c. K3 \  {8 `

% Z: p" c$ s, G$ _1 P& F; E! B5 {

# ~& @/ N( J, {代码解析概要:: ]; Q' z. h$ q) g; r
中断接收处理: 这段代码的方式大家应该陌生,收到之后缓存3 L3 I0 X/ [, {" M. s
int i;- |0 ]- k% ^* X6 L* d+ F( e, R
unsigned char ch;
, }  I! G+ F/ c* y, K0 bvoid USART1_IRQHandler(void)
" V6 N- ]# t4 y: T- w{            
7 t* E8 h' g& K! \) j7 S          ch = getchar();' X0 F$ `; m, y, y' R4 Y
                  if(ch!=0)1 a  E3 l, N1 r7 k2 @' v* d& E
                        {
* U- k& p! Q; q* q! @7 D, B9 n% s                                cmd[i++] = ch;/ [4 W+ t- K4 q0 R% }
                                if(i>CMD_MAX_LENGTH)- M+ Z! P7 q) v) ^' W# n$ a- V
                                {. j$ X7 {# U# `% n' T
                                        i = 0;
$ ^+ C( ], D. G) e5 X6 Q, K                                }                       
% N! h) r6 A0 t                                if((cmd[i-1]=='\n')&&(cmd[i-2]=='\r'))
; N) a  K6 a! t. K                                {( Y) [  g% |# Y5 U3 f4 O+ p
                                        cmd[i-1]=0;! @" e( D* I& ]; j) W9 u7 f
                                        cmd[i-2]=0;       
( b7 `* s- s# Q9 o$ `2 K                                        i=0;
. E6 {1 E2 l9 ^9 p1 X) n0 S                                        flag=1 ;6 v& m- z: m4 C: L3 _# G
* j$ ^# Z& [0 Q- Z/ X

+ n( ~0 p8 r2 ?, C% W                                }        - B) J2 f7 ^! f* M" r" T) t
                  }. {" d' a: Z$ O' k
}; N( _; w, J1 V2 f) ]. v) ~) J* y
9 F! D" t' R; b( v* K' Y* A5 s
重定向C语言函数1 u5 y" R* l! F% [8 {
int fgetc(FILE *f)
4 _) r2 p% t' A! ]{
6 c. L0 l; e  l# d0 V" l        while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
" \7 h0 L3 v. @6 H, ?6 I  S        return (uint8_t)USART_ReceiveData(USART1);5 ~# `  _1 D2 C
}
$ M% j% e, ^: g4 Wint fputc(int ch, FILE *f)
+ A) t  I) e! }- U; g. L{
( U0 T3 Q2 L# O0 Y& G, @        USART_SendData(USART1, ch);
1 M8 T( @$ B# U    while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET );. G. a) q5 y! P7 G
        return ch;
3 [: p4 ?+ s# F, r* @( Z7 v
. V) O' X# T% l1 b
1 R8 X& x5 X/ w2 T; G! K; }
}1 x" I7 c( r2 Q. ]/ @/ R0 Q
! `! v2 K8 i1 Z# ?+ ^  C% U- h

5 r" |& a* j/ \
4 K* j5 ?% B6 x$ ]
命令缓存
$ v4 \& w4 A, k) S, q: N% K! [. i* A
: F& b9 S7 `' o2 O$ M9 n% y
tCmdLineEntry g_sCmdTable[ ] =" t& @  z8 w# y/ m) @! ~( q( [1 o( A# ?* U
{
1 E2 x7 ~# ]& M% v    {"help",        Cmd_help,"\t\tisplay list of commands\r\n" },1 W& t# y( P: Q  ^- g
    {"?",           Cmd_help,"\t\tisplay list of commands\r\n" },* T2 B8 W0 I7 J- x! U, B
    {"getbaud",     Cmd_get_baud,"\t\t:Get the current baud rate\r\n"},
) E6 J: r* E, ]/ S- R0 m7 E   {"getstate",    Cmd_get_state,"\t:Get the current flag state\r\n"},
/ r7 L& u$ w# Z2 D0 T$ `! e  T" I9 U   {"setstate",    Cmd_set_state,"\t:Set the current flag state \r\n"},+ O! t  i! ~. S! H' ^$ _
    {"resetmcu",    Cmd_MCU_Reset,"\t:Reset MCU\r\n"},
9 u& D, ~4 ~' x; |% [" @+ O. m& T    {0,0,0}, H! v! V3 ?" u: f
};& K- \; p1 p! e; g: F2 C
5 Y: Y8 m) g' H3 C- K

9 k. {2 Q; _4 ~2 {' \, O5 Z
! U5 F, |% p9 m, y) p, N/ z3 d

7 T$ I% h1 G9 ]0 d这个 格式就是 输入的命令   函数名字   提示符7 a/ i" v! [4 X5 g0 M. x) b
自己往里面加就可以了" U! P' Y; D  y. W, H2 X9 f2 o
至于这些函数自己实现就行了
8 q4 q. H8 \1 T. f' w* [7 Sint Cmd_get_baud(int argc, char *argv[])
+ f9 j7 }4 Z# Q1 [{. |) L' Y3 Q. I' M& N, R3 Z* q! M
        uint32_t baud=115200;9 [' E3 P8 M9 F3 O* j
    uint8_t APP_Data[8]={ 0xAA,0x01,0x00,0x00,0x00,0x00,0x00,0x55};//»ñȡЭÒéÊý¾Ý  n4 @4 M' w2 i1 g5 \% ^6 s
        uint8_t i;
5 [" S" O) t) R* Z8 m7 N9 w    printf("baud= %d\r\n",baud);
- t) M1 U7 f+ b: S! s    for(i=0;i<8;i++)  I) w* J0 h% W( x' p/ ]
    {( |! m. W5 n2 m: \" P% X( C
        printf("APP_Data[%d]=%-d\t",i,APP_Data);' {  i" N4 f* {% |/ H2 {( h) s% ~
    }0 f# ^- P1 M. z6 y6 M( m1 [- Y. a
    return 0;5 B2 }9 k; o8 p. a8 A
}
/ V" p% c$ p& R# V' D7 X9 W' c# Z0 f2 _) l) d; L9 o8 K

; f: V7 ?5 }2 Q! ^就这样:* A7 s, U$ y4 l  |8 Y3 T5 I+ D0 k: M
注意  很多和我一样的菜鸟不玩linux 可能对函数int Cmd_get_baud(int argc, char *argv[]) 不是很懂,建议百度 秒懂
$ ?4 Z5 ?+ L9 k8 F
- ]! t. ^& m( `7 H

0 D- s0 ~, j% L: d命令解析部分  可以不用管 看这个函数  主要就是提取解析 结束符和 上面红色函数的参数,其实我也不是很懂,有能力的可以详细解释一下9 _' ^  ~- O+ U0 F% B$ V1 W

9 }/ }8 V4 W) X0 l0 F! L9 }/ H, C

; b- [: T# m" U* jint CmdLineProcess(char *pcCmdLine)2 V$ {, g) `2 `9 Y0 }1 H7 Y0 Y
( t$ p# a) M7 D* V, s

5 p* n- D1 |. u- _* D1 m# omain函数
6 f, y% X$ l- kwhile(1)3 o6 D6 Y9 ?- w; e) a% B
{
# R+ |# I" q, T6 _, S+ t/ Z! q8 D        if(flag)
" o# {& p# \! @8 h, V3 R                {
. c$ j! I$ {* ?: R# D' [                        if(CMDLINE_BAD_CMD == CmdLineProcess(cmd))0 w2 O4 b9 M* x
                        {3 t9 _% ?# _8 U6 |1 P
                                printf("unkown command, please input \"help\" \n\r");
1 a, o2 l& _+ U- k7 D9 E                        }
1 `. C9 t$ J3 n/ p; n                        flag=0;3 Q$ i- |& @- Z2 a1 O8 v
                        % D5 ?0 q: Y7 T7 @/ M3 t
                } , f/ Z& c8 W; Z
; }4 I# k) l9 a0 ?& Q6 D

* a; `' a- H! p# ?

1 [2 h0 k- X! I% x* x3 z}
8 u+ ~8 H  F1 L& A2 g* l' w0 g" {" z打工搞成 ,记得选Use MicroLIB 不然可能会死机哦  如果自己修改过不用这个库的话   就不必要做了! O( X$ t8 j' Y* R8 I5 Y
                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【】出现了表情 这个是字符格式个表情重复了 ,不惜在意* l0 r% Q9 B/ L: }+ C. o) A
源代码没有问题!
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$ g7 P( G; `; f- Y
建议也把工程文件发上来!!!

( }9 h0 Y: i. c提交了啊 ,欢迎下载
寂寞,点燃一支烟 回答时间:2018-7-13 14:06:48
creep 发表于 2018-7-12 13:50
  A$ k6 U+ T  u: ]" N0 d- Q3 G5 U% N支持!!!

( g$ `' {3 T% v 谢谢大神
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$ p8 }" b; q  W& c- p& C
我有移植UBOOT的命令行到407

, V' H  K. }! B" d# g6 e3 `欢迎分享

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版