楼主也是参考别人整理的,主要是为了和我一样的菜鸟 进行 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 ; ]1 g5 ^' c. K3 \ {8 ` 代码解析概要:: ]; 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; void USART1_IRQHandler(void) { ch = getchar();' X0 F$ `; m, y, y' R4 Y if(ch!=0)1 a E3 l, N1 r7 k2 @' v* d& E { 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; } if((cmd[i-1]=='\n')&&(cmd[i-2]=='\r')) {( Y) [ g% |# Y5 U3 f4 O+ p cmd[i-1]=0;! @" e( D* I& ]; j) W9 u7 f cmd[i-2]=0; i=0; flag=1 ;6 v& m- z: m4 C: L3 _# G * j$ ^# Z& [0 Q- Z/ X } - 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) { while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET); return (uint8_t)USART_ReceiveData(USART1);5 ~# ` _1 D2 C } int fputc(int ch, FILE *f) { USART_SendData(USART1, ch); while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET );. G. a) q5 y! P7 G return ch; 1 R8 X& x5 X/ w2 T; G! K; } }1 x" I7 c( r2 Q. ]/ @/ R0 Q ! `! v2 K8 i1 Z# ?+ ^ C% U- h 4 K* j5 ?% B6 x$ ] 命令缓存 ) 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 { {"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"}, {"getstate", Cmd_get_state,"\t:Get the current flag state\r\n"}, {"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"}, {0,0,0}, H! v! V3 ?" u: f };& K- \; p1 p! e; g: F2 C 5 Y: Y8 m) g' H3 C- K ! U5 F, |% p9 m, y) p, N/ z3 d 这个 格式就是 输入的命令 函数名字 提示符7 a/ i" v! [4 X5 g0 M. x) b 自己往里面加就可以了" U! P' Y; D y. W, H2 X9 f2 o 至于这些函数自己实现就行了 int Cmd_get_baud(int argc, char *argv[]) {. |) 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; printf("baud= %d\r\n",baud); 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 } ' c# Z0 f2 _) l) d; L9 o8 K 就这样:* A7 s, U$ y4 l |8 Y3 T5 I+ D0 k: M 注意 很多和我一样的菜鸟不玩linux 可能对函数int Cmd_get_baud(int argc, char *argv[]) 不是很懂,建议百度 秒懂 命令解析部分 可以不用管 看这个函数 主要就是提取解析 结束符和 上面红色函数的参数,其实我也不是很懂,有能力的可以详细解释一下9 _' ^ ~- O+ U0 F% B$ V1 W int CmdLineProcess(char *pcCmdLine)2 V$ {, g) `2 `9 Y0 }1 H7 Y0 Y ( t$ p# a) M7 D* V, s main函数 while(1)3 o6 D6 Y9 ?- w; e) a% B { if(flag) { 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"); } 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 } 打工搞成 ,记得选Use MicroLIB 不然可能会死机哦 如果自己修改过不用这个库的话 就不必要做了! O( X$ t8 j' Y* R8 I5 Y |
STM32F10xxx 正交编码器接口应用笔记 及源代码
小马哥STM32F103开源小四轴RoboFly全部资料大放送
分享一个STM32F103的硬件IIC代码库,完美解决IIC问题!
OpenBLT移植到STM32F103战舰开发板上适用于所有STM32F103系列的Bootloader
MultiButton移植到STM32F103战舰开发板
UDS诊断服务
使用Nano板验证驱动SPI串口屏的颜色显示
使用STM32F103制作的无线下载器
STM32F103移植LittlevGUI代码
【MCU实战经验】+自制MP3使用STM32F103ZET6和ch375读取u盘,vs1003解码,音质超棒
源代码没有问题!
提交了啊 ,欢迎下载
谢谢大神
欢迎分享