楼主也是参考别人整理的,主要是为了和我一样的菜鸟 进行 CTRI+C CTRL+V 做的准备 让你一分钟就移植成功,后续我再做在操作系统TreeRTOS下的,当前别人可以做一下 方便我们学习,不BB了,看效果图: 命令结束符是回车 这个主意一下 ,不然就是未识别命令,我估计很多人会用SecureCRT 这类软件,这个是可以用的,自己配置一下就OK ! b0 H9 K3 _7 R! y 8 w( t: W& f8 r; { 6 E1 x' P3 `2 n" I % }' C" x; R3 m. t4 y2 @ 代码解析概要: 中断接收处理: 这段代码的方式大家应该陌生,收到之后缓存 int i;; ^( h: y4 I5 j9 Y unsigned char ch; void USART1_IRQHandler(void)( }- {6 \8 O% l k3 d { # U+ m# T& W, s2 c# { ch = getchar();, Q0 Y2 t: D3 E3 R4 z* e1 ] if(ch!=0) { cmd[i++] = ch; if(i>CMD_MAX_LENGTH)# s& G" {" _1 a" r W0 o {" ~7 @2 H/ C9 H3 z3 t, F% d i = 0; } if((cmd[i-1]=='\n')&&(cmd[i-2]=='\r')) {( X0 k/ j" X9 l/ \' y2 ]/ M cmd[i-1]=0; cmd[i-2]=0; 3 Z7 t! u g; m4 S" ?! p% M7 { i=0; 4 s* P4 B9 c% I/ f" f6 O* C flag=1 ; , X* t* {3 n: d" ]5 v2 @ } 6 ]7 t" r8 a2 W* X5 q: G& V } } ' Q/ G! E6 Z4 O# L) [ 重定向C语言函数 int fgetc(FILE *f) {3 p6 j/ ^) K1 J/ |; M0 E8 v& ~ while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);' q5 c( d: @! a* t$ y0 f return (uint8_t)USART_ReceiveData(USART1);: z+ P% r6 u, X h( G, W D& J }1 `- V7 i8 O' o! z2 o9 J int fputc(int ch, FILE *f) { USART_SendData(USART1, ch); while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET );# @" V/ \* X- V. W return ch;6 r' K N6 }! W/ b" a# U3 }4 h$ B }7 A4 y6 h$ E5 N/ u9 Q 1 H# O9 B3 d5 W3 | S/ { 命令缓存 " x3 k' s! S6 N! o8 ] tCmdLineEntry g_sCmdTable[ ] = { V! a* m2 w8 p7 T0 N" { {"help", Cmd_help,"\t\tisplay list of commands\r\n" },, a, H- {6 ^, h& W* d1 U# ? {"?", Cmd_help,"\t\tisplay list of commands\r\n" }, {"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"},: l$ H1 c8 y; Z7 E( S. ? {"resetmcu", Cmd_MCU_Reset,"\t:Reset MCU\r\n"},1 `! ]# v' ^& |/ z( q {0,0,0} };8 ~1 P# L* l2 P ' m; G2 ?5 r: W+ P' k. w- R8 { 这个 格式就是 输入的命令 函数名字 提示符 自己往里面加就可以了- [# W# k% ^: R+ `4 j 至于这些函数自己实现就行了 int Cmd_get_baud(int argc, char *argv[]) {7 G. N7 c" M( s8 e uint32_t baud=115200; N8 Y* ] Z, F- g% T) I0 X# Z uint8_t APP_Data[8]={ 0xAA,0x01,0x00,0x00,0x00,0x00,0x00,0x55};//»ñÈ¡ÐÒéÊý¾Ý uint8_t i;) q1 F0 n; k9 d3 Z/ }7 h2 p printf("baud= %d\r\n",baud);8 G7 _0 L+ h. c1 G. D for(i=0;i<8;i++)7 x& _( p+ [3 C4 |( b" i {- d& u" }9 N0 E. x4 }( U printf("APP_Data[%d]=%-d\t",i,APP_Data); }1 \6 m; \3 Y4 o" U return 0; }( T* D# a1 i- m4 r & h4 d$ u s# @ 0 {, N6 H4 M1 F) a8 a1 a 就这样:) c: i0 ]1 d9 `$ E# o ?5 L+ {( u 注意 很多和我一样的菜鸟不玩linux 可能对函数int Cmd_get_baud(int argc, char *argv[]) 不是很懂,建议百度 秒懂 4 F/ M) _& }/ h% u9 x! a) H: L3 i 命令解析部分 可以不用管 看这个函数 主要就是提取解析 结束符和 上面红色函数的参数,其实我也不是很懂,有能力的可以详细解释一下 K4 u+ R4 H/ d1 o1 [ u int CmdLineProcess(char *pcCmdLine)2 X) S6 k9 x! F: e2 [7 l, U 8 v. A: z& d v* h main函数 while(1)* C: b$ `, C' Y8 Y- ~/ d k {' Q& _3 b4 ~1 A8 r! O if(flag)" A; U' }9 r9 [8 x { if(CMDLINE_BAD_CMD == CmdLineProcess(cmd)) { printf("unkown command, please input \"help\" \n\r"); }4 Q1 m' p. W J" c( ` flag=0;; ^) X ]0 I) y7 B0 o * T. f4 U3 S' W5 F$ {- w- H } Z- t; I5 f7 Z& c- E0 D : ~$ x# k6 }" \1 N, |$ B } @$ R# m( F+ s8 W; G' t' v 打工搞成 ,记得选Use MicroLIB 不然可能会死机哦 如果自己修改过不用这个库的话 就不必要做了( m M0 j5 Z j |
STM32固件库分享,超全系列整理
小马哥STM32F103开源小四轴RoboFly全部资料大放送
【MCU实战经验】+STM32F107的USB使用
基于STM32F103两轮平衡小车设计(开源)
STM32F107VCT6官方原理图和PCB
【福利】用STM32库的朋友有福了:STM32F10x_StdPeriph_Lib_V3.5.0chm...
基于STM32F10xx存储器和系统架构经验分享
基于STM32F1的CAN通信之BH1750
基于STM32F1的CAN通信之OLED
基于STM32F1的CAN通信之之串口IAP
源代码没有问题!
提交了啊 ,欢迎下载
谢谢大神
欢迎分享