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

基于STM32F072 Nucleo的Wifi无线数据传输 精华  

[复制链接]
wenyangzeng 发布时间:2015-1-7 21:51
本帖最后由 wenyangzeng 于 2016-12-16 16:23 编辑 " i, x" E6 ~7 F  v

2 w! I" t! @) r7 f: E5 I
     1、简介
       随着互联网技术的飞速发展,Wifi无线数据传输技术也随之不断发展成熟。而采用意法半导体的STM32系列单片机应用在Wifi无线数据传输中,能发挥STM32单片机的优异性能、缩短开发周期、产生较好的经济效益。
2、主要功能:
根据wifi信号传输的特点,由1台STM32单片机开发板工作在AP模式,作为服务器使用,其余STM32开发板工作在STA模式,做客户端使用。单片机之间的数据交换采用Wifi无线通讯来进行。可以应用在楼宇消防报警,也可以应用在无公害种植基地的温度、湿度的分散采集传输、集中监控等。优点是通讯无需敷设电缆,降低了项目投资成本,且作为数据采集的客户机,完全可以根据实际应用的要求将整个PCB板制作成mini结构,更方便现场安装。缺点是不适合较长距离通讯。
3、实施方案:
2 c' l3 W  F, N' o% V8 a
(1)AP主机:
    用1块开发板配置服务器TCP SERVER,用多台开发板配置客户机 TCP CLIENT,原则上所有开发板硬件配置都相同,都可以选用STM32F072 Nucleo开发板或其他的STM系列机型,本方案中在作为服务器的开发板上还配置了320*240图形点阵的液晶模块,用来显示工作状态和传输信息内容。我在上一贴使用的STM32F072 Nucleo开发板实验用的320*240液晶屏未拆除,刚好利用成为临时终端显示使用。(图1)

2 U2 n$ |0 u9 `' g; g7 E
服务器.jpg
                           图1  STM32F072 Nucleo开发板
% j! g- K8 s3 Y# T$ d' n6 B8 W
     (2)客户端机:
      手头1块STM32F103C8-PKT用来配置成客户端使用,板上有一个电位器原设计连接STM32F103C8的ACD通道1,刚好用来采集数据。PA9和PA10经过跳线与232转换芯片连接,取下跳线刚好供ESP8266的URXD、UTXD连接。见图2。
       在实际应用设计中当然还应当添加按键、蜂鸣器报警等外设。
0 ~3 b' q  v7 T! `' b+ F
客户机.jpg
                          图2 STM32F103C8-PKT开发板

5 |2 [1 r$ r0 Y. O) P
     (3)无线Wifi模块:
    选用现成ESP8266模块,简单方便。  ESP8266的URXD、UTXD连接PA9、PA10,5V供电接U5V。
      (4)ESP8266的连接方法:
      对ESP8266模块的操作控制使用串口通讯方式,连接方法见图3,ESP8266的URXD分别接STM32F072RB和STM32F103C8的PA9(TXD), UTXD分别接STM32F072RB和STM32F103C8的PA10(RXD),
  (5)供电:
      由于ESP8266工作电流较大,直接从开发板+3.3V引出无法正常工作,所以要分别用1只AMS1117从USB5V提供3.3V稳压来供电。
接线图.JPG
    图3 两片ESP8266接法相同

. k; d1 T  F$ V% _
    (6)对ESP8266的编程和通讯协议:
          对ESP8266的 编程操作是使用发送AT指令来实现的,在KEIL5环境下的串口发送用printf()函数很方便。每次对ESP8266发送1条指令后ESP8266都要返回一段数据以供用户判断发送成功与否及命令执行情况如何。这里串口接收数据采用中断方式接收,减少数据接收的错误率。由于接收的数据不定长,采用数据指针累加、延时判断接收标志位等方法来确定一次通讯过程的结束。USART与ESP8266通讯协议为波特率9600,8位数据位,1位停止位,无奇偶校验。有的ESP8266通讯波特率是115200,只要修改一下即可。

# s! N  w; [* i, q. U9 B
    STM32F072 Nucleo开发板配置成服务器端,工作模式为AP模式(模式2)。具体过程如下:
1、 重启模块:           发送 AT+RST
2、 设置工作模式:  发送 AT+CWMODE=2
3、 再次重启模块:     发送 AT+RST
4、 设置服务器参数:发送 AT+CWSAP="NUCLEO072","0123456789",11,0
5、 开启多连接:      发送 AT+CIPMUX=1
6、 开启服务器模式:发送 AT+CIPSERVER=1,8080
7、 返回模块地址:   发送 AT+CIFSR
6 G% R4 d4 E1 m* f# g7 g
    在STM32F072 Nucleo开发板的液晶屏幕上我将上述指令返回信息显示在屏幕上,当第7条指令返回信息:“192.168.4.1   OK”则表示服务器端已经配置成功。

' l4 n' X0 B7 k, h, d' }
   STM32F103C8-PKT开发板配置成客户端:STA(模式1)
1、 重启模块:           发送 AT+RST
2、 设置工作模式:   发送 AT+CWMODE=1
3、 再次重启模块:     发送  AT+RST
4、 连接网络:         发送  AT+CWSAP="NUCLEO072","0123456789"(这个参数就是服务器端设置的参数)
5、 开启多连接:      发送  AT+CIPMUX=1
6、 建立连接:         发送:AT+CIPSTART=0,"TCP","192.168.4.1",8080 (这个参数就是服务器端第6和第7条指令的参数)
   连接成功后,就可以从客户端发送数据到服务器了:AT+CIPSEND=0,10后随10个数据在TempSensor[]数组中。
这10个数据是客户端ADC转换结果换算成电压值并转换成ASCII码,因为定长10位,不足部分补上空格。此处ACD转换采用DMA传输,省却了涉及对ADC转换操作的过程。
    调试工作应该先调好服务器端,再调试客户端。由于每次代码修改都要重新启动AT指令,因此本例程的调试是一个痛苦漫长的等待过程,您就慢慢去体会吧!
   在随后视频中你可以看到接收端的Wifi板上的蓝色LED响应了发送端Wifi板上蓝色LED发送时的闪烁。
! l: l& t1 z- j8 ~; @4 X4 g

* n) Z6 h& \/ N- Q8 K1 }
7 J8 E& }+ Q, S

评分

参与人数 1 ST金币 +20 收起 理由
zero99 + 20

查看全部评分

赞 收藏 1 评论49 发布时间:2015-1-7 21:51

举报

49个回答
wenyangzeng 最优答案 回答时间:2015-1-8 13:42:35
本帖最后由 wenyangzeng 于 2015-7-31 22:31 编辑
, l, n4 p( {; U1 k' Q  T9 ]; f5 w  v# Y4 o4 r% _
上个视频
0 l2 ^# \! w5 w/ R( Z一手操作一手摄像,图像摇晃,对不起。+ D; Q' }+ {( T) m0 ]1 ^

6 o( o0 j9 g, X- Ihttps://v.youku.com/v_show/id_XODY3MDkwODMy.html- l3 E" C% y/ _, w

; P; i% M5 L) s7 f. G9 \. H3 g& l
: _, c, W5 z' t: ]; `! k. a
wenyangzeng 回答时间:2015-1-7 21:51:32
本帖最后由 wenyangzeng 于 2015-1-19 11:54 编辑 2 h4 V& S* p1 T# O, X* C7 g

/ g* Z8 ~6 `, r5 ^- P& a  因为我使用的液晶模块估计与大家使用的不兼容,代码就不全部放上,只放关键代码了。4 U' x: B8 ~# }9 |" ]
客户端:
( i! n) e/ }' S0 g" A#define ADC1_DR_Address    ((uint32_t)0x4001244C)" S( x) n( D. ^1 q1 G
ADC_InitTypeDef ADC_InitStructure;  P5 m6 j: I( _$ ~7 y
DMA_InitTypeDef DMA_InitStructure;
0 S- x" v& Y5 s# Q__IO uint16_t ADCConvertedValue;* ~9 l  c, \3 d0 u
__IO uint16_t Rx_count=0;
+ a5 s. i( y9 g8 g__IO uint8_t Uart_buf[100];
8 [3 l' h& A& d5 g! quint32_t tmp;
) V% o& Q3 m1 m$ Wchar TempSensor[10];5 l+ p; Z7 \! X% C
char const *ptr             ;
( I: \. F+ h" ~/ a* }1 Euint8_t Flag = 0x00;2 _3 Y2 {& g3 R3 k* k
void echo(uint8_t Number);0 o8 P6 A. d- ]! l- E& ?
void RCC_Configuration(void);4 H7 ^0 Q+ u3 o/ d- j0 _
void GPIO_Configuration(void);
, y5 B# t, g6 X2 c: N! p: C$ w 7 i2 x$ t+ O/ I+ g
void DMA_Configuration(void)
5 d6 }* M% R+ S$ T8 O{   
1 D( o8 m# x: K: J0 w  DMA_DeInit(DMA1_Channel1);
5 J- x( o$ A+ L  DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;
2 w6 v6 {( _0 F- b3 `  Z8 k  DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&ADCConvertedValue;
. U5 H1 S3 }7 [1 N  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
: {, @7 c* U. f* Y; h  DMA_InitStructure.DMA_BufferSize = 1;# L& g, G# h- \/ d9 Y
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
- X! E$ d6 o1 C; Y4 m! h9 b  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;
" ]. j; I6 }! @( P  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
! Q+ K2 ^7 k+ g  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;! O6 I. r1 `1 Z: ?3 w! k+ m/ _
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;; b; K+ v. J5 Z( h
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;( z3 b3 Y/ _  N2 j
  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
' c) Q* W! v( o  DMA_Init(DMA1_Channel1, &DMA_InitStructure);
2 q. d7 P, }1 c% w/ \2 n, {  DMA_Cmd(DMA1_Channel1, ENABLE);# }6 Y. B* q3 }" l
}
2 E! p4 A3 `" d* W , k5 B) ]2 }" u/ p* |; ]4 d
void ADC_Configuration(void)
! E7 _6 h- R* Y# u" s{8 S% `. s8 |, {& B3 O: X
  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;2 _, n9 _( h9 `6 u' ~
  ADC_InitStructure.ADC_ScanConvMode = ENABLE;
  l5 V/ X1 M( }, o0 H5 }" l9 Y  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
' V6 S( U8 \, J3 m8 V1 S  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
# v) R) M5 G/ q! j& ~  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;% V0 K# E9 n) J1 a
  ADC_InitStructure.ADC_NbrOfChannel = 1;
+ q" K! r( D8 A+ i. a) [7 {# u7 i  ADC_Init(ADC1, &ADC_InitStructure);
. x! l) P, J0 M, ?. s  ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_55Cycles5);( \! b  u7 }9 Q" `
  ADC_TempSensorVrefintCmd(ENABLE);% y0 w8 ?8 P8 c2 {1 V
  ADC_DMACmd(ADC1, ENABLE);
+ s3 h- Z, V# R5 ?2 t. Q7 k  ADC_Cmd(ADC1, ENABLE);( }) g5 m' k5 z+ m: b; b+ f& m! E0 f, a* m
  ADC_ResetCalibration(ADC1);
6 P# l- W- A( h) D) \; A9 U  while(ADC_GetResetCalibrationStatus(ADC1));
! f1 E& T& V# y5 b" l2 l/ x: u, V  ADC_StartCalibration(ADC1);
7 `$ X$ \6 M8 ]) p/ v) T  while(ADC_GetCalibrationStatus(ADC1));
4 [) `5 m4 i% O3 W( y! ]  ADC_SoftwareStartConvCmd(ADC1, ENABLE);
, g+ A; w! Z" V7 l* c}1 X& ?+ D2 S5 |
int main(void)
0 A' l, Q6 d* B# Y+ m{uint8_t i=0;+ K: D. T' I6 d. S
  ADC_Config();2 C; l8 s5 ~# N/ P! N
   DMA_Config();
- ~  v, b1 u" RUart_Init();
" n; ]3 x/ `. k5 ~# T" E   Nvic_Init();2 m6 t% u/ Q' N" C$ T5 F
       for(i=0;i<100;i++)Uart_buf='\0';( v! D% N0 q+ e" f# c9 k
       USART_ClearFlag(USART1, USART_FLAG_RXNE);
3 F$ [; S* I- G5 [, h        Rx_count=0;- t& \& p* f; V# w/ W) |. W8 C9 t* Q8 j
        printf("AT+RST\r\n");           //重新启动$ A$ F& f. v7 Z0 @6 O
         echo(0);
9 P; Z7 T' a! }* j* h  g       delay_ms(200);9 p8 m1 E5 V; E! w5 F0 a) z/ ], R
        printf("AT+CWMODE=1\r\n");     //模式1" z/ Y' T# h8 W8 a) G6 p/ n
        echo(1);
) w, _, ^6 a5 {6 J" a2 I  _6 `  h       delay_ms(200);
7 ~: E3 q! r4 N& m        printf("AT+RST\r\n");           //重新启动
8 T! ]6 m& P; R" R4 X& I* q        echo(0);% V# v, Q; L7 P5 L
        delay_ms(500);9 m! Z7 ~6 l- l, N
         ptr = ( char const *)&(CWJAP);//AT+CWSAP="NUCLEO072","0123456789"* g  L' e! U& u9 c" r; n9 m0 R
              printf(ptr);
" l' Y+ E" T! W. L$ I         delay_ms(500);
! @' g: x0 }. i% M( G9 Q/ z              echo(2);5 ]6 n$ j3 f% _) k5 c" s
       printf("AT+CIPMUX=1\r\n");                                   //开启多连接2 ^8 A0 X1 y, u; R4 c' M* {
       delay_ms(500);       Y3 |7 b7 d% f# t! X
       echo(3);! A( U! y0 g1 E9 h+ q  ?
       delay_ms(200);+ j; E8 M' M4 ^; E, T
       ptr = ( char const *)&(CIPSTART);5 k* u/ z3 h. r% ~
       printf(ptr);
- m+ @3 `4 b7 i2 [' X1 G5 Q       delay_ms(500);
, R  _3 J2 _+ r2 M8 P0 A       echo(4);
5 ]. Z, F$ V% ?5 P5 a       TempSensor_BCD();/ B9 S/ N. T9 Y3 m& ?& P! A
        ptr=( char  *)&(TempSensor);         
, B! y5 L" O) O' Y* r0 P; G        printf("AT+CIPSEND=0,10\r\n");6 ]9 V3 k- s3 T2 u4 z: d$ T5 O1 f
        printf(ptr);, |$ R) D) r4 E
         echo(5);) W- d5 y3 z8 C! ^; D7 {; E
  while (1)& [/ G, \3 b- _
       {
" ?2 a& u9 D1 n' Y2 H& j    while((DMA_GetFlagStatus(DMA1_FLAG_TC1)) == RESET );- S- I- D! U( k. b
    DMA_ClearFlag(DMA1_FLAG_TC1);2 z( [% ]0 l/ o1 }
     delay_ms(100);$ I8 X. k8 s. ~7 k4 ~0 Y
     TempSensor_BCD();
1 L# f- b" x7 @  c( b      ptr=( char  *)&(TempSensor);          & v6 r# o! @7 o! W+ ?8 @
       printf("AT+CIPSEND=0,10\r\n");
6 N. ?4 D5 I0 P& B- a       printf(ptr);
! T2 O7 h) Q5 F        echo(5);/ N7 b! e9 Q6 a
  }# t, Z, T+ w2 j- U! o0 t2 \
}
, n: H  U& C# S' [. ~; e服务器端! r# h# E$ G5 Z! C) N; ~& y
void Uart_Init(void)# q" {4 e" r4 t1 J, e1 c  I/ s* _
{
0 ], j: O/ q7 D5 @        GPIO_InitTypeDef  GPIO_InitStructure;
) h0 J* i! O( u3 l. @: I' Z        USART_InitTypeDef USART_InitStructure;
/ K; ^; |- M& o' G                   8 S3 n% j, T* f9 m
        RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOA   , ENABLE);   // 使能GPIOA端口4 U/ b- `* C1 O* h+ O
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);             // 使能串口1时钟
/ C4 p& m8 Y- D) M1 r2 m         
$ [& b3 U6 X; z6 k) k7 s        GPIO_PinAFConfig(GPIOA,GPIO_PinSource9, GPIO_AF_1);
1 F7 |1 u* r+ p- r- Q  m6 {7 N+ O        GPIO_PinAFConfig(GPIOA ,GPIO_PinSource10, GPIO_AF_1);                          1 [4 |$ a/ s; m2 r  K$ @1 G

8 h# Y7 U6 x% a: L( J9 y8 ^        GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_9 ;                 8 V; i4 R1 t' V- X5 ?- a2 o0 H& n
        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;) m+ F; q+ A5 q; G
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
4 [5 @% ~4 U5 B. M1 w; j        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;1 ^6 E  P# w7 k; M
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;- u' ~- [( a  Z3 v0 r& c8 A
        GPIO_Init(GPIOA, &GPIO_InitStructure);; T! X/ f2 j* w

' A- D% @7 \* t) k        GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_10;, S8 v" J6 }2 F) J) Q
             GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;4 z7 {+ |+ h, S' i  W2 h
        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;      
5 j* h8 C6 q- x0 q        GPIO_Init(GPIOA , &GPIO_InitStructure);& ]( ]" b. X4 T2 H4 `

9 ^3 x# y) P7 S1 v  t( `        USART_InitStructure.USART_BaudRate = 9600;                                    $ y$ o! P( T5 P/ ]
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;              4 x3 |% H. M* P7 j
        USART_InitStructure.USART_StopBits = USART_StopBits_1;                        " p6 c' L6 u, Q/ z& r
        USART_InitStructure.USART_Parity = USART_Parity_No;                           
; R  c0 q+ L! g8 j        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
! c% D7 Z" x: S. `! u6 b5 W+ u: F        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;              
- l; z! ~& H; A0 K; a1 b5 t        USART_Init(USART1, &USART_InitStructure);        //串口配置2 x$ T$ l# |3 W) o2 i
      
4 B$ L8 d4 x% h9 h" V        USART_ITConfig(USART1, USART_IT_RXNE,ENABLE);//打开中断      Q# x8 o. i5 R, V$ I2 X$ N
        USART_Cmd(USART1, ENABLE);//使能串口1; N5 \4 F/ k7 Z4 C9 i+ h+ O: B+ D9 Y% X
        USART_ClearFlag(USART1, USART_FLAG_TC);
1 }; ~: e7 `; b; N- c      & ?' d" v9 @  C
}' C( \' i6 A. }6 t) x: l4 s
void Uart_Put_Char(unsigned char c)
3 [3 I5 ]: ]+ G+ I$ U! ?3 Z% s- b{   6 z4 @% |. `" z0 V
  while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);  
9 ^4 O/ T: I3 W2 e USART_SendData(USART1,c);  
- @* ?9 t+ T4 Q7 m) e. u, Q}2 n+ d* ?; `- [& N
, l3 f4 f0 b4 |  x6 s
unsigned char Uart_Get_Char(void)* v9 q9 }. b9 L/ M! b3 ~/ f
{   / h, k+ }2 `) v# h0 S  R
     unsigned char temp;3 d% N* f! S" v& e2 J0 K' K
     while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
4 F# X& m7 z6 q) ?     temp = (unsigned char)(USART_ReceiveData(USART1));6 ^% m0 |; E$ i5 d
     return(temp);   1 G& Y5 s# M: t
}% c* W3 W2 X5 R) `9 o$ G& K6 r
int fputc(int ch, FILE *f). x3 G# `$ N' A* T8 g  p7 k' _9 L
{. W, T1 E7 Y" P4 i' c0 E* o
  while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);1 V" [7 u5 p- X3 W1 ]9 ^
  USART_SendData(USART1,(uint8_t)ch);
1 X' @- a6 m# r  return (ch);
" |9 X2 P" m( ^+ X}
9 x- l  C  `6 n8 N* S% l( w! Mvoid Nvic_Init(void)
. t9 ?& L0 b, R% d5 E. s# g$ _{* L5 c5 _8 K0 u/ g- r( t6 s5 I
  NVIC_InitTypeDef  NVIC_InitStructure;
# F+ i. Q: `, Z# Z6 ]! w: t  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
: i1 x) }9 G  _/ |! d0 f  NVIC_InitStructure.NVIC_IRQChannelPriority = 0x00;
" U2 t1 g4 }4 B3 h  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
+ L* x5 I; j# m0 A4 W9 G  NVIC_Init(&NVIC_InitStructure);
" r) i( S& m9 ?! x}
( f- D9 P8 H4 {) p4 M + H! q: k! |# h, e* U
GPIO_InitTypeDef GPIO_InitStructure;     
, f, {. m. j/ e! w% Jvoid GPIO_Configuration(void)$ V' j2 A& m# d; e6 {* _) b+ M
{
- ]  q' e: K/ ] 8 @: H/ y' x+ d; d+ y/ o
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA|RCC_AHBPeriph_GPIOB|RCC_AHBPeriph_GPIOC, ENABLE);4 n) X3 \1 `( R8 n
       GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_39 q  `2 r! {  @% L, D7 Z. a6 s$ i. H
                          |GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8;$ t0 N8 P0 `$ t
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
, H$ G9 f2 x7 N3 T! u: I      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;# q/ E8 Z* V# }  m8 m: u6 o
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;1 L* @. {: A) T( G! B
      GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;4 w& o* x0 m! Q6 s0 d: w& ?
       GPIO_Init(GPIOC, &GPIO_InitStructure);
  Z4 {& }9 v5 r4 q' E4 O       GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_5;
/ x. C" e  v# S! V, h2 y! z9 [    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;2 [8 _) e/ P* f+ {" {  x4 i
      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
3 T+ _  A/ ]8 h( Y      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;4 i6 O! q. p) L- \3 }
      GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;- f4 E# ^7 C4 v9 A0 f4 V; i
       GPIO_Init(GPIOA, &GPIO_InitStructure);
  z& a. V$ l6 @6 h     GPIO_InitStructure.GPIO_Pin =        GPIO_Pin_3|GPIO_Pin_5;# E8 K/ D/ X7 s1 `% z% ~
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;4 O* E7 ?* X; A) x
      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;& M) F" Z) g; [( M
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  D9 a4 k2 U! }' p; J
      GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;0 m' Y. X$ X+ R2 z5 \, L
     GPIO_Init(GPIOB, &GPIO_InitStructure);4 H4 w$ j& }5 o% Q/ X( @
       GPIOB->BSRR = GPIO_Pin_5;3 W; j; ?- ^+ ?6 l
}8 E; S9 ~3 O; F* ]% U
int main(void). \/ |" D1 V" |5 J* m
{ uint8_t i;       * D2 G; q( d0 T# N4 s0 y% [3 E) U
  char const *ch;! j% d) w2 s  L. }$ |9 p
  SystemInit();! W4 ?4 p1 o$ `. K0 T+ P
  Nvic_Init();' \/ o# U' A+ b% W* \  r
  GPIO_Configuration();
$ v# m1 E% o, B& [. |0 x3 v  LED_Init();# Q2 f" g7 \$ X- b+ }7 D6 m
  Uart_Init();
5 B: E2 @: ?+ }8 V7 c4 ^  lcd_init();
& F5 }* y9 J% m  lcd_clr();! \7 m: l! v; G. [* I' b7 V0 G
   Screen();/ c; u. l' |7 n4 N3 f# m7 y5 {
       for(i=0;i<100;i++)Uart_buf='\0';, J" \6 R3 ~. E
        USART_ClearFlag(USART1, USART_FLAG_RXNE);
  P. n) {. l0 {7 k& O+ `, |# t- I    Rx_count=0;
" t0 ]- C- j9 `! m8 G    printf("AT+RST\r\n");           //重新启动$ c" \) A5 x" y. O5 m- b
    echo(0);8 ~$ i/ S) p' u1 c( h$ A, w0 l7 O, `
     printf("AT+CWMODE=2\r\n");     //AP模式; Q6 u5 ~- s, A5 O: V4 ~* i
     echo(0);- K4 a7 J1 D( G3 Q/ i
       ch = ( char const *)&(CWSAP);//AT+CWSAP="NUCLEO072","0123456789",11,0  ,通道号11! z9 H' w0 T  A$ B
       printf(ch);8 A( Z1 J6 a  s1 A$ C
       echo(0);# E2 f+ w9 X" |8 X& y
       printf("AT+CIPMUX=1\r\n");                                   //开启多连接
: \4 W  K* O' y0 W       echo(0);6 c2 u7 L! w: m* ]
       printf("AT+CIPSERVER=1,8080\r\n"); //开启服务器模式: [% r9 B0 P, I1 u# [0 x
       echo(0);
# L: ?; ~0 U( j7 {( e       printf("AT+CIFSR\r\n");        //返回模块地址! g# K& R1 E1 u! g. k- A; ~
       echo(0);
! l% A( g; A6 {' T8 g9 c  while(1)
, p  x. C% l3 S       {, o3 f$ a$ Q) c6 ?
              if(Flag==1)    3 f* o4 ]5 w& t& o1 x
            echo(1);, g5 s1 i2 _4 {
  }
$ Q# Z  u% a& N* S% H2 d}% o3 w, W$ \  \1 k8 z

6 u* g3 D8 n. ?% C' V4 |! ?2 \" I9 s1 T6 ~3 n

+ y  n4 \+ n' S" @  R4 Z
wenyangzeng 回答时间:2015-1-21 13:51:20
wu1169668869 发表于 2015-1-21 12:09
$ r+ U: D' E3 b不知道那个串口wifi功耗怎样?
9 M# h5 F& e4 Q而且速率那么低的情况可以考虑zigbee做,传输距离更远 ...
8 `. B1 k4 h' V9 |, ]
耗电不小,发射时要几百毫安的。
沐紫 回答时间:2015-1-7 22:09:07
不错哦,谢谢楼主
sacq12 回答时间:2015-1-7 23:02:56
在楼主这里,新认识了Wifi模块ESP8266。学习~
damiaa 回答时间:2015-1-8 15:55:57
好。支持
万里-363223 回答时间:2015-1-9 11:00:52
sacq12 发表于 2015-1-7 23:02" m4 c* S9 Y1 S" E' ~1 k
在楼主这里,新认识了Wifi模块ESP8266。学习~

+ U$ O8 U$ m8 o" l" R9 G我也觉得是,呵呵
沐紫 回答时间:2015-1-13 17:21:17
不错哦,加油
mlxy123xy 回答时间:2015-1-13 23:29:14
这个不错,,等额拿到新板子,和原来的discovery也来试试无线互联
slotg 回答时间:2015-1-14 01:18:11
不错的分享,我还不晓得有 ESP8266 这个模块可以用,长知识了。
党国特派员 回答时间:2015-1-14 09:21:28
222.png
沐紫 回答时间:2015-1-14 17:20:34
很不错的方案
党国特派员 回答时间:2015-1-19 09:24:36
33.png
wu1169668869 回答时间:2015-1-21 12:09:09
不知道那个串口wifi功耗怎样?% b$ |9 A. F( t% c4 I: h, F- a
而且速率那么低的情况可以考虑zigbee做,传输距离更远
1234下一页

所属标签

相似技术帖

官网相关资源

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