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

STM32 WIFI 上位机 UDP协议 控制  

[复制链接]
lovewyufeng 发布时间:2015-1-23 10:45
本帖最后由 lovewyufeng 于 2015-1-23 12:07 编辑 5 A+ i, |" M; n( [
预备知识 请看下面两贴! W9 m; X4 a9 D- D% Q, c6 X2 F3 D& f

+ n2 {& r. ?9 k! Z8 |STM32 如何快速创建 FREERTOS和RTX 工程
) f7 I; ^, N$ t$ a5 |干货 Nucleo072 usart 基于RTOS的应用 方便AT指令类外设开发  W, m; R5 p2 M0 W# h

! J8 r; e  R- g" e$ |. n# Y9 |使用的 Nucleo 072板子  其他用户请稍许移植一下
- u1 @: P; H/ Q' s0 {- _7 o; V5 q% e
原本楼主发上面两贴就开始策划 这个东西 计划参加 方案大赛的。( p/ k( W) t8 o; z9 d! ]
& u/ \" z; g# e$ [2 @
原方案计划设计一个 智能 开关局域网内 PC  手机APP 可同时管理所有灯具,按键使用 F0的触摸模块,使用WIFI 和433! @1 [! z7 Y% Y! E3 s, F
组网,目前淘宝有十分成熟的 智能灯开关产品 不过都是用RF实现有兴趣可以搜索一下。
$ k9 a. e( \1 `2 X9 r, j9 h& `* Y" B6 s' W- W
结果最近太忙没空弄这个,加之考虑到本方案一个缺陷 那就是WIFI模块加入的热点需要配置。如果使用433模块再设计一套
6 D) b1 J2 z. ]8 v$ r* l0 F( |, `; R4 v  R* L  C
可以配置WIFI的协议那是相当恐怖的  首先你的 433 主机(其他产品的遥控器)得支持液晶显示了,反正很麻烦了。不整了
& I) V& m) l+ S1 b7 D; T4 s# o- f- o8 u  z
现在将第一步完成的 内容分享大家参考  AT WIFI 产品设计,甚至蓝牙串口也可按同样的模式设计  。,纯串口当然不用说了
% D2 N' @8 p, X+ {- p2 B, R- _5 q' E- I' D2 D. D
- |' R" h$ k4 k! A' P
模块使用的 是8266 连接单片机 串口1  PA9 PA10引脚
( M4 P  |, u/ v8 i$ v8 Y6 }" m下面是 效果。,上位机还没写,使用网络调试助手 给模块发送指令下位机执行相应操作 6 k9 c, c  G0 d

5 w9 ]. t- B6 ^: f9 [截图发送了 3条指令  get ip ,get cpu id,和 set led on
/ l: G) @9 }7 l: z6 N" O2 R5 @# k3 @/ Z; ^- n# f
使用串口助手或者超级终端波特率115200 连接 stlink的虚拟串口 可以看到调试输出内容截图左边
/ r+ M, @) t8 p' a/ ^实际操作可看到板子上LD2 可由 set led on 打开或者又 set led off关闭
5 D4 f# n8 C& ^. O4 V, [" R  k. |( [9 y' ?; M, C" }4 L: K

% p4 }' ^6 X  a% L
  1. 9 f3 [0 y7 t1 V0 P  ^
复制代码

+ `3 N6 g7 ~) |) t0 j* L- @
/ h  u+ c; l. G累死了  论坛竟然限制 发帖最大字符数   10000 帖子太长发帖失败  内容都没了 ,,,可怜的重新码了一次。。。6 f: u1 [) M& _; W- \6 n5 F

USART_WIFI.zip

下载

4.71 MB, 下载次数: 306

SocketTest.rar

下载

330.85 KB, 下载次数: 321

赞 收藏 6 评论27 发布时间:2015-1-23 10:45

举报

27个回答
lovewyufeng 回答时间:2015-1-23 10:50:47
下面贴几个关键函数 讲解一下 ' W: ~3 ]* W5 `7 i, t

# ]; Y' K0 G# W4 g2 Y% H) W+ U8 B

  1. , @4 F2 H7 n7 x$ f# U8 d# |  z
  2. void USART1_IRQHandler()  `* q. M' {. e3 d/ A0 k
  3. {
    8 G! \' e/ w- f
  4.         UART_HandleTypeDef *huart= &UartHandle1;- D7 {% y, x3 X+ i
  5.        
    + p* G) j. ]: ]% D! S% \: L# x, I
  6.         /* UART parity error interrupt occurred -------------------------------------*/  Z8 ~3 }- G2 q7 c( g) e
  7.   if((__HAL_UART_GET_IT(huart, UART_IT_PE) != RESET) && (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_PE) != RESET))  ?! f2 [" o% R  U# I( i1 a  |
  8.   {
    $ @+ A  n3 v3 ~7 |7 v
  9.     __HAL_UART_CLEAR_IT(huart, UART_CLEAR_PEF);
    ; w/ D- Y. `( k% H2 d/ F
  10.    
    0 V# Y6 A4 ?1 e( G# y* C! D! r7 ^
  11.     huart->ErrorCode |= HAL_UART_ERROR_PE;; i6 l. ~' P5 C( u1 a
  12.     /* Set the UART state ready to be able to start again the process */
    ' e$ x( V! {$ b  W
  13.     huart->State = HAL_UART_STATE_READY;
    " x) ^4 b2 N3 [. o2 I, d- u0 D0 A
  14.   }
    ' L$ ~8 P9 o  t' L7 K# x
  15.   
    / v! U+ U. t' I% t  J8 d5 }$ U& N
  16.   /* UART frame error interrupt occured --------------------------------------*// S- b1 Z1 v" e! L. w
  17.   if((__HAL_UART_GET_IT(huart, UART_IT_FE) != RESET) && (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_ERR) != RESET))( `! v% Q  Z- c4 t/ @+ C
  18.   { " S7 v" w& {1 R  n
  19.     __HAL_UART_CLEAR_IT(huart, UART_CLEAR_FEF);  Z) e, {0 Z* E, m
  20.    
    9 A8 o  v2 }6 i! K
  21.     huart->ErrorCode |= HAL_UART_ERROR_FE;) Q- Y* p. Z$ E* Q
  22.     /* Set the UART state ready to be able to start again the process */
    $ C7 K, x$ D1 [$ M' {% p
  23.     huart->State = HAL_UART_STATE_READY;
    # R4 A5 L6 y, s
  24.   }$ f  o& d% o6 J% C
  25.   
    5 Q+ \( X: c5 B- p* I! B4 w0 }9 _
  26.   /* UART noise error interrupt occured --------------------------------------*/8 Z4 q# F5 O7 {5 W+ I" X
  27.   if((__HAL_UART_GET_IT(huart, UART_IT_NE) != RESET) && (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_ERR) != RESET))
      s5 _8 g: e4 C- S% M$ I) Y1 Q# k
  28.   { $ o8 F$ |6 x2 d: K9 j% I
  29.     __HAL_UART_CLEAR_IT(huart, UART_CLEAR_NEF);
    1 G& i8 x. {0 q, L# v! ?
  30.     ( e% K: u3 q% z- n
  31.     huart->ErrorCode |= HAL_UART_ERROR_NE;   
    1 G* Y. R! m0 [- a) u  Z' p1 x
  32.     /* Set the UART state ready to be able to start again the process */- _1 ~$ P) V* [) Q# c( t% o
  33.     huart->State = HAL_UART_STATE_READY;
    8 i* O$ {: [7 K0 z3 t
  34.   }
    % W. M9 c$ O0 S0 X( ~' G& t
  35.   
    $ q/ n7 L+ Y/ d/ ]' D9 S- j! q
  36.   /* UART Over-Run interrupt occured -----------------------------------------*/
    % C$ E: o3 x: [
  37.   if((__HAL_UART_GET_IT(huart, UART_IT_ORE) != RESET) && (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_ERR) != RESET))3 U. }9 x8 w/ F: s4 g' n
  38.   {
    / g0 U' }' o+ J6 y0 i
  39.     __HAL_UART_CLEAR_IT(huart, UART_CLEAR_OREF);; N6 H3 m) s( Y& Q7 w5 m& u: W6 c0 {
  40.    
    8 F+ m8 x0 R# F' Z
  41.     huart->ErrorCode |= HAL_UART_ERROR_ORE;     
    : o6 U" y' O2 r
  42.     /* Set the UART state ready to be able to start again the process */
    2 E- q- ~: U( q' A
  43.     huart->State = HAL_UART_STATE_READY;: ^, q* f7 A- g4 @& a
  44.   }
    ' ]- U4 {* @# Q
  45.   ; @& R+ T0 h: W+ s0 X
  46.    /* Call UART Error Call back function if need be --------------------------*/
    . M3 y; I7 a+ [0 h' H# |: O6 y9 b
  47.   if(huart->ErrorCode != HAL_UART_ERROR_NONE)6 `, i+ O3 H' F% R$ V5 p
  48.   {
    # j; r& j7 o& W7 q- N
  49.     HAL_UART_ErrorCallback(huart);
    . {- A- ^* s* t! |
  50.   }6 K5 F7 o9 s# H' B9 X
  51.   
    : e" i$ q* k5 B
  52. #if !defined(STM32F030x6) && !defined(STM32F030x8)  
    5 F+ q1 p5 |& H! G$ {' n2 w
  53.   /* UART wakeup from Stop mode interrupt occurred -------------------------------------*/
    7 H! T5 v* ~+ @, x7 w
  54.   if((__HAL_UART_GET_IT(huart, UART_IT_WUF) != RESET) && (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_WUF) != RESET))
    1 o' m6 h% c( w" C
  55.   {
    + K) n: p" t2 d" a4 i
  56.     __HAL_UART_CLEAR_IT(huart, UART_CLEAR_WUF);
    5 b% ^- z, U6 y/ H. c3 x& O+ S! n
  57.     /* Set the UART state ready to be able to start again the process */4 o0 A5 L$ G# R8 u2 ]5 x
  58.     huart->State = HAL_UART_STATE_READY;
    $ G) R7 p  o9 b1 _* r
  59.     HAL_UART_WakeupCallback(huart);. q: o' j) Y& R; M, T- Y
  60.   }1 S, H. K( U" \: I
  61. #endif /* !defined(STM32F030x6) && !defined(STM32F030x8) */
    2 C" X" w  u" q( S7 q3 f. {) s
  62.   
    / O' z2 o" N* X% i
  63.   /* UART in mode Receiver ---------------------------------------------------*/
    : Q7 |. W7 o4 r
  64.   if((__HAL_UART_GET_IT(huart, UART_IT_RXNE) != RESET) && (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_RXNE) != RESET))" z2 ^8 e+ u6 J
  65.   {
      g$ }/ F% ]5 B6 _
  66.     /* Clear RXNE interrupt flag */5 A. g/ Q' U7 s: Y6 C' E7 c! T
  67.                
    ; Q( N3 h4 p/ f' ?! ^
  68.                 rx_buf[0].buff[rx_buf[0].rx_index]=huart->Instance->RDR;& i( B1 L1 `/ i  C/ }- X7 G
  69.                 //huart->Instance->TDR=rx_buf.buff[rx_buf.rx_index];; |; Y2 U; ]# D" r; c
  70.                 rx_buf[0].rx_index++;//储存接收到的数据到 缓冲区
    + H3 v  v6 r, U8 `
  71.                 osSemaphoreRelease(usart_Rx[0]);//通知  scanf 有数据收到
    * @! w% P5 q! \5 {; q2 e% q9 D7 x& z
  72.                 if(rx_buf[0].rx_index==BUFFSIZE)
    # c& G) l8 b1 N7 o; p7 m- x" k
  73.                 {  i- _4 v: o! i
  74.                         rx_buf[0].rx_index=0;6 l. W. m; ?! f& j. V) v
  75.                 }
    0 E+ H7 ~% s) ^6 P; }
  76.                 if(rx_buf[0].rx_index==rx_buf[0].save_index)
    9 ~1 g3 j2 I( {, l; H  u- F
  77.                 {
    $ Q& J9 o' w) _
  78.                         rx_buf[0].save_index++;3 z, k: E3 p: `# X+ i
  79.                         if(rx_buf[0].save_index==BUFFSIZE)# H7 N% A" g" v
  80.                         {
    % s% k& A6 [, b. m' Q& @
  81.                                 rx_buf[0].save_index=0;
    . q% D  W7 K; i4 [. }' U. m* h6 n
  82.                         }
    4 p% ?$ s6 j4 [2 E1 ~0 H" v) {) m
  83.                 }2 h3 _3 e8 g/ V& w) S; _
  84.                  __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
    & I0 y6 ^$ v. x5 ^$ t$ w

  85. 6 E/ G" ]4 U/ o' h% ]3 X
  86.   }
    8 b) o  N# o2 v8 R* p, F  O( S
  87. 8 B) Q8 }9 X; A$ S
  88. }/ k* o1 R# Q/ @! G8 u9 d5 b
复制代码

! F" A6 Q. |6 k4 o0 D7 T3 ~/ [5 @6 \: t& p6 O, C5 h7 L
//下面这个函数被scanf所调用
4 y2 _2 h4 Z# b1 S& r
  1. 7 T$ U+ z- \! C+ j: n0 H1 i) M
  2. int fgetc(FILE* f)) j  \" a$ K8 F- l
  3. {
    ! Q" b0 k0 C$ n2 I
  4.                 osStatus st;/ V7 a) Z$ p  N
  5.        
    2 C% ~3 ?# r4 _8 M; j
  6.         char index=0;
    ' y: R; R8 ~) a9 @6 h+ m% D, `
  7.         int ch;+ o" `0 Z, r# }0 c8 v
  8.         4 {" h  W( u$ e9 G+ g
  9.         if(f->usart==USART2)
    & e% o/ o: O9 l# l
  10.         {
    # s7 J' j) L8 L- t6 t$ X* w$ E
  11.         index=1;
    * W  c2 O, |/ W  K
  12.         }
    7 S" Y- p' ~8 U' ]4 s4 B
  13.         . v- Y! V  m* \7 d2 ~
  14. if(rx_buf[index].rx_index!=rx_buf[index].save_index)
    - T+ ~, r# }8 }! W5 T0 J' e
  15. {
    , n4 b/ N8 m$ l5 b3 n2 ^
  16.         ch= rx_buf[index].buff[rx_buf[index].save_index++];
    9 U+ l% C1 R' q7 H# p$ k2 [
  17.         if(rx_buf[index].save_index==BUFFSIZE): H  q5 `; _7 w9 _; X
  18.         {" _/ f. }1 M1 N' t
  19.         rx_buf[index].save_index=0;. l' A  h: |) u6 H9 u
  20.         }/ V& n2 y/ P8 Y  S
  21.         return ch;//缓冲区有数据则取得数据
    ; g: k8 V5 W5 w
  22. }( k  e$ [! Y3 X
  23. else
    1 r! ~7 o: g% B1 T1 ?" p3 S
  24. {//没有数据等待数据
    5 z" v  x) H5 d' a4 U
  25.                 if(index==0)9 ^3 t% c/ P1 N' P  h- ~' y
  26.                 {  X% G6 W  W  P8 r; n7 G
  27.                         st=osSemaphoreWait(usart_Rx[index],wifi_wait);. P4 m$ w1 I! }7 E6 s" D" j! E
  28.                 }6 }" g2 e4 F4 C% e
  29.                 else
    . C+ x# @* k* g( h. y% h/ c# R
  30.                 {
    $ x4 Z: k% F' J' R7 K
  31.                 st=osSemaphoreWait(usart_Rx[index],usart_wait);
    ( S  `) y" Q4 a
  32.                 }- K; x8 j. {3 P" U% m& G
  33.         if(st!=osOK)4 G; k/ e  e; }: U
  34.                 return EOF;
    4 `1 `$ v) r% _2 Y2 E7 S
  35. return fgetc(f);
    , j, f3 |$ V0 N+ M2 d
  36. }
    & `8 a" X" _. n" b; E5 f4 P

  37. # a8 T$ M: U" Q5 q7 S! {
  38. }
复制代码
7 \; o# T# }2 b
//这个函数用于发送 指令给WIFI- o9 o+ S! Z' q8 x
  1. int Send_Wifi_cmd(const char *str,unsigned int wait,char *buf), u9 Q3 E: R0 H+ T/ T# W* \& N  n
  2. {
    - t1 Y% x6 T+ s3 s' O9 A7 U/ B9 q
  3.                         int ERR;) P6 A, W% @; i) a: V
  4.                         fprintf(&wifi,"%s\r\n",str);//发送指令
    , ?+ M7 R6 r- N' R/ |/ L
  5.                         set_wifi_wait(wait);//设置超时时间5 G: B2 O. t1 N! z" w- T. u, I
  6.                                 if(fscanf(&wifi,"%s",buf)!=EOF)//扫描模块返回
      e1 ^8 X3 w7 p+ B, [* Q
  7.                                 {
    & \" G8 E1 g) o
  8.                                 fprintf(stdout,"%s\r\n",buf);9 e8 L6 V7 e& y4 v$ i) k. {, W; d
  9.                                 }
    7 M8 I7 q; p5 H' j. E
  10.                                 while(1)3 B9 ^2 z7 \& V
  11.                                 {//循环扫描模块返回 直到超时或者返回OK或 ERROR
    8 x' Z# {4 b/ x
  12.                                 if(fscanf(&wifi,"%s",buf)==EOF)( V- T7 y5 E3 b( C! `
  13.                                 {0 K3 t9 j, C7 q, S- g" X8 N
  14.                                         break;
    ; Y* G& R7 j7 U2 m
  15.                                 }
    , J& J; |: S" A- A. z
  16.                                 set_wifi_wait(1000);2 f' ]0 ]; q. P/ s3 C9 O: ?$ F. d: l8 x% b
  17.                                 fprintf(stdout,"%s\r\n",buf);
    9 P  D, K4 ~" l$ o  {( D) v9 h' Z  A
  18.                                
    * S4 u0 t* d( g
  19.                                 if(fscanf(&wifi,"%s",buf)==EOF)2 M9 z! ~  T0 R' M+ d( P9 V5 Q6 f
  20.                                 {1 ^# n  t; k, L- [
  21.                                         ERR=osEventTimeout;% A% R. i7 X0 d: U$ V# q
  22.                                         break;) D+ l! [7 G% n9 A. E
  23.                                 }
    ; l" w, [6 `- F1 Q+ K
  24.                                 //set_usat_wait(500);
    . P" ]& b5 @' `8 _
  25.                                 fprintf(stdout,"%s\r\n",buf);9 p2 v) @7 C9 K% q) @
  26.                                 if(memcmp("OK",buf,2)==0)( M6 F0 P1 y1 }; c4 Q( D# \8 U
  27.                                 {
    2 Z3 u5 W: P6 r7 z0 n1 E0 j
  28.                                         ERR=osOK;
    2 j0 N4 R; x, @# z
  29.                                                 break;
    2 n6 l! A+ W& b8 \, d
  30.                                 }
    , N/ J4 D' K; v6 w
  31.                                 else if(memcmp("ERROR",buf,5)==0); A4 f2 R# P) r3 {8 S3 A
  32.                                 {
    5 s3 U# Q. r* O! ~! ?- E
  33.                                         ERR=osErrorOS;
    7 J; W& v: m' q* ~$ V
  34.                                                 break;
    ( [) X  O# ?2 M
  35.                                 }
    - p* g, j8 Z/ T1 ~
  36.                                
    3 a# t) |  ?2 k( ?) H; w+ Y
  37.                                 }
    . [" g/ W6 p! N- d/ r/ ]; J
  38.                                 return ERR;$ A5 p- L7 g" p% o! I
  39.                                 # u$ c- m2 S3 {5 |4 i. G
  40. }
    ; z) J, w! o2 x( Z3 G
复制代码

- D/ \4 P4 ]! ?2 h3 C) {5 F/ {
  Q. |& q( p, U7 H' l  u8 Z' O. O
4 [! i1 l' i! h2 Z: d
lovewyufeng 回答时间:2015-1-23 10:57:36

  1. 1 S; h1 d- E" t; {8 t" n6 `' x& F
  2. static char buf[40];
    7 x) s2 i& ~7 B. z3 N! G  h) V$ D9 C2 ]
  3. void  usart_wifi(void const * argument)//WIFI的线程
    0 ^5 ^5 J0 ?$ }
  4. {, M' s  e9 h( S4 q& |- v
  5.                         static char IP[20];; Z5 a/ b2 q9 X9 c% r
  6.                         if(AT_test())4 T) k# t1 a0 g% x6 R! @$ q
  7.                         {7 z* J( c3 r: J5 u6 W$ ^; D% T1 ]
  8.                                 Send_Wifi_cmd("AT+CIOBAUD=115200",300,buf);
    ! W5 s( M3 E# O! v+ Y( K' `
  9.                         }" p  c" z1 r+ {  i
  10.                         usart_init(115200);# K- C' ?$ F8 e
  11.                        
    6 y2 |* C6 n! i8 }, _
  12.                         Send_Wifi_cmd("AT+RST",500,buf);
    1 ~! F" O7 A* o5 K9 H) V$ D8 N, ~
  13.                         Send_Wifi_cmd("AT+CWMODE=?",500,buf);5 T1 y7 g- U8 x
  14.                         //Send_Wifi_cmd("AT+CWLAP",5000,buf);6 b! J! @3 w8 N3 j# h
  15.                         Send_Wifi_cmd("AT+CWJAP="TP-LINK_C6FC68","123456789"",5000,buf); //加入热点7 d; s% Z! R7 p; i% b( u/ _6 p
  16.                         Send_Wifi_cmd("AT+CWJAP?",300,buf);& a5 H3 ?3 A' n' k0 ~% x" w  X
  17.                         Send_Wifi_cmd("AT+CIPMUX=1",300,buf);//启动多连接$ [9 k, K/ p  v  A/ r& s3 L
  18.                         Send_Wifi_cmd("AT+CIPSERVER=1,1234",300,buf);//启动服务器模式5 b4 V4 b( T; m9 h  V
  19.                        
    * ?) H6 b0 q  h/ @' k+ p9 D5 w, E
  20.                         fprintf(&wifi,"AT+CIFSR\r\n");//获取 模块IP
    6 k# @7 V6 [. {) y+ ^
  21.                         set_wifi_wait(1000);8 u) B, ]' l5 q  s
  22.                         fscanf(&wifi,"%s",buf);
    # {5 x4 F; e* s1 A5 H
  23.                         printf("%s",buf);
    0 m3 V" ~$ h& u2 p
  24.                         fscanf(&wifi,"%s%*s",buf);
    7 T+ u6 `, l8 Z( S1 b' Q
  25.                         printf("%s",buf);
    8 S. V6 ^5 @3 P& Y; P$ X- ]
  26.                         if(memcmp("ERROR",buf,5)!=0)
    3 a' b- C: [# K3 f
  27.                         {
    ! H$ L4 a( k2 h: a+ y
  28.                         memcpy(IP,&buf,20);//储存IP  由于模块IP是DHCP动态获取的  上位机APP无法预知IP地址所以 模块先获得自己IP 储存等待上位机使用 UDP                                  //广播get ip 命令获取IP
    1 V/ m) v# S: ]
  29.                         printf("%s",IP);
    # @- ~: b+ I0 W+ M
  30.                         }
    6 G' q: W! W) B# h' g, z
  31.                         Connect(buf,1,"UDP","192.168.2.255",1234);//启动UDP模式: H, ~1 z5 O; C3 w) v, ~: f0 a
  32.                         set_wifi_wait(50);- ?' H+ R/ L8 O) g& k) H, ~
  33.                         set_wifi_wait(osWaitForever);
    # H4 E) H' p. L9 D$ Z4 u6 ?
  34.                         ; v0 c6 y+ Q2 j8 }6 ^* E# T
  35.                                 if(fscanf(&wifi,"%[^\n]",buf)==EOF);
      K2 i, `% v: l  s" M
  36.                                 fprintf(stdout,"%s\r\n",buf);
    3 T* I4 W$ u# s- b4 a% m; F
  37. 6 {! _$ z: J# A; m6 R
  38.                        
    1 }/ p8 r: x; D2 L
  39.                                 while(1)9 C4 d6 w* }7 Z! o# Y
  40.                                 {
    4 D, S* ^/ r0 L5 }
  41.                                         timeout:1 ?7 V! C! P  r/ k# p% \
  42.                                 set_wifi_wait(osWaitForever);0 h0 o& ]8 t8 m" }# m
  43.                                 if(fscanf(&wifi,"%*9c%[^\n]",buf)==EOF)goto timeout;//扫描 WIFI输出
    ; s! R0 j! G) Y1 Y
  44.                                         {6 W9 u* C, D7 g
  45.                                                 char cmd[5];
    6 q; ?0 S1 F, P" F7 P$ ~
  46.                                                 fprintf(stdout,"%s\r\n",buf);
    0 P* h9 L4 U/ U. ^
  47.                                                
    8 O+ H- b  r$ d/ G# E2 [
  48.                                                 sscanf(buf,"%*d:%s%*c%[^\n]",cmd,buf);//解析命令
    & a; ~3 n1 l2 c+ T5 ]9 i( j0 o: F
  49.                                                 printf("%s\r\n",cmd);
    2 C/ ?  {6 f0 z, g  Q- ]+ M
  50.                                                 ! Q3 R; n$ ~) ]" v9 o+ B& \: W; `
  51.                                                 fscanf(&wifi,"%*s");
    ; n  @# _( U" P* H
  52.                                         if(memcmp("get",cmd,3)==0)//get data 如果是get命令
    1 h4 s/ b1 m% r9 a
  53.                                         {' ~9 x% c5 n: ]! o
  54.                                                   y9 M! b$ i$ a3 P
  55.                                                 if(memcmp("ip",buf,2)==0)// get ip命令 * z; f! P+ ~/ C6 {: }" c8 j( V
  56.                                                 {8 e5 G& k7 T6 E( T% M# v" z
  57.                                                         send_data(IP,buf);//发送本机IP; P" v6 F7 O% J0 Y0 V5 j
  58.                                                 }/ c. l7 M* ]% f+ G* U- e# y8 P7 E7 Y1 O
  59.                                                 else if(memcmp("cpu id",buf,6)==0)
    7 a5 \  b  a' O* W1 [( Q5 {+ T
  60.                                                 {8 `9 ?$ q1 N. k) L, t2 f/ X
  61.                                                 send_data("CPU uid",buf);
    : z8 L5 M+ W- m+ ~* k: }+ A# G
  62.                                                 }
    8 H: n4 \7 {! N* r. C3 H
  63.                                                 }
    1 ?5 w8 v$ B1 H! Y
  64.                                         else if(memcmp("set",cmd,3)==0) //set data' G" j+ k3 `5 f. J( j/ J6 l
  65.                                         {  H' i: _3 q8 F7 O! S5 c0 `
  66.                                                 if(memcmp("led on",buf,6)==0)) l5 P* A7 ^% X' B
  67.                                                 {
    : p+ p. i; v2 ]: y- C5 C, C
  68.                                                 GPIOA->ODR|=GPIO_PIN_5;% Q+ M% k; ?, _: J
  69.                                                         send_data("LD2 ON",buf);
    + \7 R( ~  M7 Y( J! W7 Z. l
  70.                                                 }
    4 U# C. X5 d4 u9 `
  71.                                                 else if (memcmp("led off",buf,7)==0)
    / M0 _* g; p7 N6 z
  72.                                                 {; f+ n% Y" {8 f3 v+ l8 N
  73.                                                 GPIOA->ODR&=~GPIO_PIN_5;$ c5 g+ i/ g- y4 u* w$ C
  74.                                                         send_data("LD2 OFF",buf);
    - p4 y  L) @9 D7 P6 j: Z( R
  75.                                                 }5 e% \$ H/ ~* J3 |
  76.                                         }        7 H3 y  |$ _$ b! z8 X, m) ~$ Z
  77.                                         }4 v" o( W% f( w5 u6 Z$ Z9 C3 g. G+ {3 I
  78.                                 }; b4 O5 ~4 @1 K( O# ~, p
  79. }
复制代码

* F; j, C, R9 v5 s* {+ d4 P! v4 ]3 u1 O: i9 ~$ T
" c6 g$ n5 i3 V5 a
9 }' ]7 N% \. S" o4 M& H
注意usart_wifi.c 一开始有 几个 FILE定义  主要是为了区分  printf 和 scanf 操作的 串口
9 i& t, p/ \% b5 R' u8 u) R- E0 f& `2 F1 [
QQ图片20150123103258.png QQ图片20150123103406.png
  G% J" s) H* {0 {7 c9 L% |$ a2 z) j; R5 q: m7 |5 r
0 a6 g6 T4 f8 s9 \/ \& Q) G$ P
然后需要注意 8266 TX右边的 引脚是需要接VCC的
% l0 S5 D" n& U
* z6 i0 j) V: y1 S& E/ j1 o QQ截图20150123103904.jpg
( `; q+ `3 }$ ^- W( q9 I: O5 a8 N
巅峰残狼 回答时间:2015-1-23 16:29:25
lovewyufeng 发表于 2015-1-23 11:059 M6 S* ^) K0 k
建议 MCU调试的时候的使用两个串口 一个用于和 WIFI通信 另一个将WIFI回复内容  全部上传  方便调试 ...
& ^! k/ v9 B1 O
另外一个已经占用了,太纠结了,呵呵!\r\n已经加上了,不是这个的原因,先前配置都是这么处理的,配置提交都成功了,到这步卡死了
巅峰残狼 回答时间:2015-1-23 11:03:04
Hi,楼主,我用WiFi模块设置为STA模式,串口配置工具配置的时候是通讯正常的,但是写程序的时候同样的参数就是连不上路由器,但是配置已经成功了,就是到连接路由器连不上了,楼主遇到过这种问题吗
lovewyufeng 回答时间:2015-1-23 11:05:16
巅峰残狼 发表于 2015-1-23 11:03  A0 g1 m& z6 l# b' t9 U
Hi,楼主,我用WiFi模块设置为STA模式,串口配置工具配置的时候是通讯正常的,但是写程序的时候同样的参数 ...
5 L; q7 t8 `8 I; R7 B' u
建议 MCU调试的时候的使用两个串口 一个用于和 WIFI通信 另一个将WIFI回复内容  全部上传  方便调试
lovewyufeng 回答时间:2015-1-23 11:05:48
巅峰残狼 发表于 2015-1-23 11:03" i  l3 }! g! X. s. [5 I* n
Hi,楼主,我用WiFi模块设置为STA模式,串口配置工具配置的时候是通讯正常的,但是写程序的时候同样的参数 ...

& i& G- _% H; S8 x# u8 y# w有可能 命令忘记 \r\n了?
lovewyufeng 回答时间:2015-1-23 11:10:19
效果图不见了  现在补上
) I$ W/ @) _) p( R) w9 w  t
$ J+ K  C7 Y- V: [ QQ图片20150123095513.jpg
+ A# t  p+ S" m8 e
埃斯提爱慕 回答时间:2015-1-23 11:16:37
提示: 作者被禁止或删除 内容自动屏蔽
witnessiz 回答时间:2015-1-23 11:55:49
不错,支持,有空试下
5 l' G9 H1 \6 K: z4 z) W7 |7 r
feel-376797 回答时间:2015-1-23 12:06:58
谢谢楼主分享!
lovewyufeng 回答时间:2015-1-23 12:10:58
witnessiz 发表于 2015-1-23 11:55! D  G5 ~+ k6 u) t
不错,支持,有空试下

3 Q- r- V3 o( f! H; V/ k哈哈 wit 出现了~~
moyanming2013 回答时间:2015-1-23 16:41:04
LZ好人啊
大秦正声 回答时间:2015-1-23 17:02:34
用的啥wifi模块啊?
lkl0305 回答时间:2015-1-23 17:16:46
好帖,学习下
12下一页

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版