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

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

[复制链接]
wenyangzeng 发布时间:2015-1-7 21:51
本帖最后由 wenyangzeng 于 2016-12-16 16:23 编辑
; V; `2 @/ W- V9 |6 Y1 F
! L/ ?% s8 ?* w1 V$ ]. x' a
     1、简介
       随着互联网技术的飞速发展,Wifi无线数据传输技术也随之不断发展成熟。而采用意法半导体的STM32系列单片机应用在Wifi无线数据传输中,能发挥STM32单片机的优异性能、缩短开发周期、产生较好的经济效益。
2、主要功能:
根据wifi信号传输的特点,由1台STM32单片机开发板工作在AP模式,作为服务器使用,其余STM32开发板工作在STA模式,做客户端使用。单片机之间的数据交换采用Wifi无线通讯来进行。可以应用在楼宇消防报警,也可以应用在无公害种植基地的温度、湿度的分散采集传输、集中监控等。优点是通讯无需敷设电缆,降低了项目投资成本,且作为数据采集的客户机,完全可以根据实际应用的要求将整个PCB板制作成mini结构,更方便现场安装。缺点是不适合较长距离通讯。
3、实施方案:

* n6 O7 r2 F& V) @
(1)AP主机:
    用1块开发板配置服务器TCP SERVER,用多台开发板配置客户机 TCP CLIENT,原则上所有开发板硬件配置都相同,都可以选用STM32F072 Nucleo开发板或其他的STM系列机型,本方案中在作为服务器的开发板上还配置了320*240图形点阵的液晶模块,用来显示工作状态和传输信息内容。我在上一贴使用的STM32F072 Nucleo开发板实验用的320*240液晶屏未拆除,刚好利用成为临时终端显示使用。(图1)
2 j! w; y, E; e* j
服务器.jpg
                           图1  STM32F072 Nucleo开发板

3 Q0 I4 T( s& z7 m
     (2)客户端机:
      手头1块STM32F103C8-PKT用来配置成客户端使用,板上有一个电位器原设计连接STM32F103C8的ACD通道1,刚好用来采集数据。PA9和PA10经过跳线与232转换芯片连接,取下跳线刚好供ESP8266的URXD、UTXD连接。见图2。
       在实际应用设计中当然还应当添加按键、蜂鸣器报警等外设。

1 Z/ f; S0 A% L( q
客户机.jpg
                          图2 STM32F103C8-PKT开发板
& a5 O* h& k% \+ m
     (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接法相同

5 p3 N" e2 ~" z: b
    (6)对ESP8266的编程和通讯协议:
          对ESP8266的 编程操作是使用发送AT指令来实现的,在KEIL5环境下的串口发送用printf()函数很方便。每次对ESP8266发送1条指令后ESP8266都要返回一段数据以供用户判断发送成功与否及命令执行情况如何。这里串口接收数据采用中断方式接收,减少数据接收的错误率。由于接收的数据不定长,采用数据指针累加、延时判断接收标志位等方法来确定一次通讯过程的结束。USART与ESP8266通讯协议为波特率9600,8位数据位,1位停止位,无奇偶校验。有的ESP8266通讯波特率是115200,只要修改一下即可。
! ~: S; ~0 s' v4 W* H/ Q$ N( ^
    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

9 T5 T& J% ]* ]/ L/ |9 F& a
    在STM32F072 Nucleo开发板的液晶屏幕上我将上述指令返回信息显示在屏幕上,当第7条指令返回信息:“192.168.4.1   OK”则表示服务器端已经配置成功。

7 z( Z- z8 Q! P  g- c/ y! n; m
   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发送时的闪烁。
! Q/ t- T$ V8 e* R( ]

8 F2 J7 e9 b* h- M  e' \- D
; d- {' @: Z/ M# D( J; R: q

评分

参与人数 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 编辑
! r5 |0 u7 g# C9 B' }2 G  i0 {' k4 a' d
上个视频
  w. M: g4 _, M$ X. V$ \& W. f一手操作一手摄像,图像摇晃,对不起。8 M. v8 O. x9 s
7 a, `8 G, O  ?' J! F; v: Q1 f" b( w: n
https://v.youku.com/v_show/id_XODY3MDkwODMy.html) V7 @+ K" R6 \3 [$ Q/ E

! _3 u2 c: i: E4 Q* W
- @' q# K8 n) ^/ s, L
wenyangzeng 回答时间:2015-1-7 21:51:32
本帖最后由 wenyangzeng 于 2015-1-19 11:54 编辑
# N+ B' f* b% m3 ]) w, N+ [) N! ]- U# l7 w9 S- _1 `
  因为我使用的液晶模块估计与大家使用的不兼容,代码就不全部放上,只放关键代码了。) Q* P: a" v9 A5 ^* E; J, A
客户端:% H2 y$ \$ F* Y; r1 ?3 _  u
#define ADC1_DR_Address    ((uint32_t)0x4001244C); T! M) l; c+ @; p2 x; l3 Q
ADC_InitTypeDef ADC_InitStructure;
/ M) O) g# Y9 \. f3 ?DMA_InitTypeDef DMA_InitStructure;( @$ K3 f& n* p# }, j1 L
__IO uint16_t ADCConvertedValue;
, U3 o" U# [, I1 ~( A/ W__IO uint16_t Rx_count=0;
0 Z8 D. X6 Y% ?9 [- L__IO uint8_t Uart_buf[100];
# ]0 O- x& f8 |% V& m( luint32_t tmp;) C: ^3 g2 o) z7 x/ H4 n
char TempSensor[10];$ j- A8 H+ ?( \1 Q+ t7 j
char const *ptr             ;; E8 v( ?9 u; J
uint8_t Flag = 0x00;
2 N7 i1 t. _% K4 ~' J6 a$ rvoid echo(uint8_t Number);% E# w! G: @7 l  e3 a) ?( q( U# d
void RCC_Configuration(void);
/ Z7 ^  s6 u9 l$ l: M. hvoid GPIO_Configuration(void);
1 x  J1 m- S# I; T' G & w/ x! a- c9 h7 b
void DMA_Configuration(void)
( @" S5 o) V; r' R8 Y  |{   
1 ]* t# R$ n4 }; ]  DMA_DeInit(DMA1_Channel1);. ?* W4 E  \. i& t. v
  DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;& k  z' b8 T% ~1 b- n, P' D
  DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&ADCConvertedValue;
' T& b' g  \& x" M8 X, I% w7 J/ I  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;. F0 c2 l" B- Z, ~+ C+ c7 f
  DMA_InitStructure.DMA_BufferSize = 1;0 ^, k1 h; A; e* g
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
8 F, S% q# c5 M  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;4 `  Q% f. i+ I4 q
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
$ A5 ]0 k: R9 M1 R  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;: X0 ?+ p; s& L; b/ }) K! X+ Y
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
2 X8 z' _$ M/ ?1 O9 ~1 v7 F  DMA_InitStructure.DMA_Priority = DMA_Priority_High;) b1 Z5 K/ {# e$ h: P
  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;& `0 I( {) q% h; G  y8 H6 J
  DMA_Init(DMA1_Channel1, &DMA_InitStructure);
1 X% v4 S3 I2 w( U  DMA_Cmd(DMA1_Channel1, ENABLE);$ ^% y# W3 N! _$ H* K) F2 i1 I; |' z
}6 d. L- t9 w; x5 ]/ y
" f6 i7 d9 |9 p; c
void ADC_Configuration(void)0 ?0 C1 H4 d% N
{
9 x! p+ e  S- o' z, [  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;9 H( r3 e- p& b) c2 N% ?6 A/ f
  ADC_InitStructure.ADC_ScanConvMode = ENABLE;
1 z5 X5 p* r. W4 w5 p  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;- G6 C7 K2 W& h; q& [6 }
  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;* g  F1 H: L& i+ K7 J( T' V4 Q
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
6 y1 K: l' a+ q6 q& J2 E  ADC_InitStructure.ADC_NbrOfChannel = 1;, q2 u5 Q- f& d! ]! z
  ADC_Init(ADC1, &ADC_InitStructure);, Y; Q4 c' x% M3 v  I& Q) t
  ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_55Cycles5);4 I  p1 d5 a: o. E; i# p! r! I
  ADC_TempSensorVrefintCmd(ENABLE);4 E" c. r7 B- s# \' P6 D3 y+ ~/ E
  ADC_DMACmd(ADC1, ENABLE);
! q4 v  O  m9 k% c; H  ADC_Cmd(ADC1, ENABLE);
( Y$ r$ s, Z) t) f6 T! ~, o) B1 C  ADC_ResetCalibration(ADC1);
& q$ ~, y, l. Y2 W, ~  while(ADC_GetResetCalibrationStatus(ADC1));6 f3 n/ C7 W) {* c
  ADC_StartCalibration(ADC1);
/ J! |1 o1 V2 ^. n  while(ADC_GetCalibrationStatus(ADC1));2 v+ b! `7 @6 {
  ADC_SoftwareStartConvCmd(ADC1, ENABLE);7 {0 T* ~9 ]' S5 V( K/ Y9 N1 r5 ?) P
}
3 s6 N: V, y7 H- I  H: Z% h0 [int main(void)5 e8 m8 ?5 Z% W, E+ i3 }( S. ]: M9 Y
{uint8_t i=0;5 [6 k; h7 N2 E+ j7 _& g. S# \
  ADC_Config();" x: p8 {, g1 Y$ C2 R
   DMA_Config();
% z) S: J7 F6 W4 V- H( eUart_Init();" ~; \, q. O  x2 N" a
   Nvic_Init();) e9 Z3 \8 C  Q: J% T' P% v
       for(i=0;i<100;i++)Uart_buf='\0';8 l4 y5 b* Q% ~; N0 N  S
       USART_ClearFlag(USART1, USART_FLAG_RXNE);
2 V+ z! c, y& R# z( p. K) q        Rx_count=0;
& ]4 ]2 L) q! v, @+ X# m8 N        printf("AT+RST\r\n");           //重新启动1 h& ^' C  @" h  t% l1 ^
         echo(0);# o& o& z' U% x1 _1 b# M
       delay_ms(200);
# C, I5 Q8 D( Y1 B/ G0 K        printf("AT+CWMODE=1\r\n");     //模式1
. K6 d  _# A+ v& Y6 k& A        echo(1);
6 y( D: {. V4 t) c       delay_ms(200);
* t6 u* r% A+ k! F  T% H7 H        printf("AT+RST\r\n");           //重新启动1 r: [: O, c# T: s
        echo(0);. W4 _; h- ~% g
        delay_ms(500);$ u, v7 \- M+ b6 {) |# m2 S
         ptr = ( char const *)&(CWJAP);//AT+CWSAP="NUCLEO072","0123456789"
& [5 I2 g! Z4 ^+ h/ s5 x3 f              printf(ptr);
7 E. o( P) U7 y- m8 @1 U( r6 c         delay_ms(500);
- o  s" F6 k1 q" @* \: H              echo(2);1 U& S( g& e8 }
       printf("AT+CIPMUX=1\r\n");                                   //开启多连接/ R# w: C2 M" c' [5 P: F6 }: P
       delay_ms(500);     , s6 C2 j/ r$ n, e9 E$ X3 @/ t9 k
       echo(3);
. b; r# L8 R. ]       delay_ms(200);! x/ L9 G7 V% C6 Y) L3 ?4 A* }
       ptr = ( char const *)&(CIPSTART);9 S  r$ [9 Z' v& t% }* e* H
       printf(ptr);
; |: k; o! Q9 e0 }       delay_ms(500);* X* D7 I0 [) ~6 q1 S$ N
       echo(4);
$ f% A9 v0 d9 A. X' s2 G       TempSensor_BCD();
1 T9 e: c5 g# {3 Y( ]) E/ ^        ptr=( char  *)&(TempSensor);          ' L. v0 d, F* M/ \
        printf("AT+CIPSEND=0,10\r\n");" ^" h* J5 k4 B3 R
        printf(ptr);
: R1 q$ l" q9 n8 g9 U         echo(5);
0 ^2 d2 \- J. @9 B  k  while (1); ^. [4 P$ s; ?9 D
       {
/ K) a7 t2 P# p7 z" Y5 w8 ?: T    while((DMA_GetFlagStatus(DMA1_FLAG_TC1)) == RESET );; w! q) W/ \: q5 u6 H
    DMA_ClearFlag(DMA1_FLAG_TC1);
  ]! {; I2 t, J1 K3 \8 r5 G$ G     delay_ms(100);- v7 `+ `7 S4 ^4 ~+ X$ t. U
     TempSensor_BCD();( k: Y6 a3 b6 h+ B8 X, T
      ptr=( char  *)&(TempSensor);         
5 F% R/ O7 f# i2 K; R( j       printf("AT+CIPSEND=0,10\r\n");. n2 w! @# A1 \: r% A" m- m
       printf(ptr);
1 x+ r* c' j7 l% q( ~$ M1 F" V        echo(5);
" D" b  v; T" `# Z0 U# {  }
" t* c2 z; V( X1 Q) R( J  B}
( n4 {3 p) p7 F7 N7 z' G服务器端6 x  f3 F5 }0 [5 c0 T1 l' U3 b% f
void Uart_Init(void)
. k$ T- j# Z% `$ R- ?{
) c. q# p5 D5 P* f' ~4 w+ [: J        GPIO_InitTypeDef  GPIO_InitStructure;
1 r' J1 w" y4 X6 r$ D, {        USART_InitTypeDef USART_InitStructure;4 ~7 j( O4 y  f% V" m
                  
: b+ U; h+ p& r/ p        RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOA   , ENABLE);   // 使能GPIOA端口
1 o2 E' h. @' Q. I% P        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);             // 使能串口1时钟* a5 p5 z6 C) q' V8 K
          $ a& z" M- ]) d0 |4 Z! t
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource9, GPIO_AF_1);1 w  }$ B) W4 {) _1 f+ e- Y
        GPIO_PinAFConfig(GPIOA ,GPIO_PinSource10, GPIO_AF_1);                          
) `  G) w) ?+ N) w0 `+ h
; y$ C: W8 r1 D" U) {. [7 C% ?        GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_9 ;                 , z& X0 p' z9 ^0 M7 Q
        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;. H) W4 C4 E1 p' S  r7 ?. S' K/ g
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
* o- k$ r1 @" R( V5 f) O$ n0 D        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;/ z/ M' U( {- n  |
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
6 G1 D/ Y* @- j! o  \        GPIO_Init(GPIOA, &GPIO_InitStructure);2 j' }% E8 t0 n& w. z: x4 G: i) e; K

* a/ `! g7 n+ E, l1 {: \        GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_10;
, d) H  Q1 L  O+ ], V& n             GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;. `# G# s  `) L, P, {/ r& W
        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;      
& a9 |' ^0 ^& v5 u/ v9 @% B        GPIO_Init(GPIOA , &GPIO_InitStructure);
' @; p& H2 G5 m+ n- B6 K( y
( A& i. b; C+ l2 [2 z/ K% r        USART_InitStructure.USART_BaudRate = 9600;                                    
: e, V4 z6 @6 M* H+ P        USART_InitStructure.USART_WordLength = USART_WordLength_8b;              8 [' m% z9 M) C# @2 A; c0 O
        USART_InitStructure.USART_StopBits = USART_StopBits_1;                        
6 G- C# |* v6 p. Q1 P9 _6 @: |        USART_InitStructure.USART_Parity = USART_Parity_No;                           * n; _" y; l0 \
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;- b0 g3 g3 Q, k
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;              
% l* z, l! w; E& \) m- j; D        USART_Init(USART1, &USART_InitStructure);        //串口配置* O% k, [9 M+ h! F" g
       * C* ?/ |1 h; }5 k8 y) z
        USART_ITConfig(USART1, USART_IT_RXNE,ENABLE);//打开中断    3 b3 d# g' V9 m3 S- a& o
        USART_Cmd(USART1, ENABLE);//使能串口13 t- f. ]$ a) k1 m4 @( b7 f5 D
        USART_ClearFlag(USART1, USART_FLAG_TC);
0 _+ X0 x& r6 `; E1 ~4 Y( c      
* b, @5 M& `+ N' l}
& o/ O8 B$ S" X' h* h; {; ^void Uart_Put_Char(unsigned char c)
. w* K& C: f$ t7 J  g1 |{   
# @/ u. I1 d  x2 ~0 `  while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);  
' d$ u8 S  R4 q9 D USART_SendData(USART1,c);  / P' f: P7 X, ?
}
8 _7 N% t( l/ S( u  h0 y8 I3 J3 f 5 V: p- V/ u" W# ^' h
unsigned char Uart_Get_Char(void)
) d3 ^8 ?' [- X% P, Z{   6 O$ L$ i$ @  N  b% a8 i
     unsigned char temp;0 s1 S9 M2 |/ h/ @
     while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
7 o/ @4 j( g+ a2 {# o! c; s' Y: B     temp = (unsigned char)(USART_ReceiveData(USART1));
9 [2 F  Z2 s2 @0 \     return(temp);   3 F6 n" Y# `7 y) L
}. h, `% R+ ]! G3 ^
int fputc(int ch, FILE *f)
" y# J' w5 z" [, X{, K+ z0 M0 E* S: e/ k% l
  while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
* T, S* [2 y: V# u% Q  USART_SendData(USART1,(uint8_t)ch);
' E. L6 g# V' E9 X  return (ch);
* ?: V* u% W7 g8 _# v4 |}5 P1 |  s' B3 [/ r
void Nvic_Init(void)1 _7 h/ s/ j/ P- U3 E8 O5 u) W. g
{" r+ C% L7 i, S% l
  NVIC_InitTypeDef  NVIC_InitStructure;
9 i) [1 H6 L& u' {: u  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
0 ~" g9 g2 t7 N0 a& m, l1 m5 q$ F  NVIC_InitStructure.NVIC_IRQChannelPriority = 0x00;
) o6 l" T" l7 Z  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;% u0 z% u$ O7 [1 M! {; n" _  r
  NVIC_Init(&NVIC_InitStructure);
9 H4 ~/ O' i" q5 _0 K, ?}
7 ]; C8 {) V& E" {/ k; [4 L " X' q" d+ s* E+ P- w
GPIO_InitTypeDef GPIO_InitStructure;     
* c6 s; \( [1 ovoid GPIO_Configuration(void)4 }4 D1 ~* s6 F' |
{
! \& \: l- g3 U* n( I( ~  K
* E1 w4 G$ s2 @. c  @RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA|RCC_AHBPeriph_GPIOB|RCC_AHBPeriph_GPIOC, ENABLE);  B3 P% u5 M* b1 _
       GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3$ ~7 ^6 y7 u7 S/ v% ^4 M
                          |GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8;3 j0 [' S6 [! k! r: r5 S
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
" g3 `  w/ l7 G9 F      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;, I* W9 p$ F9 D1 L5 r/ Q, {
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
7 f+ B( K: E7 J5 N$ s, W  \! n" n      GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;. q' T) Q: ^) t) C8 Z
       GPIO_Init(GPIOC, &GPIO_InitStructure);% N7 k- D5 f" U& P
       GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_5;
1 f0 ?* ]5 _2 V$ Y5 M8 f    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;& ^) p( k1 Y+ b. `
      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
0 u/ R7 F+ g; `) t" R. P+ d! S      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;6 T- v" ]2 ~! ?8 ?; v: q
      GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;/ J) s% Q0 n  e6 r
       GPIO_Init(GPIOA, &GPIO_InitStructure);) p- ^. d  D# }6 ^6 v1 d
     GPIO_InitStructure.GPIO_Pin =        GPIO_Pin_3|GPIO_Pin_5;
* x, B) h' s% I- U+ f. \    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;$ ^! o  Q$ `. N8 C* p/ m
      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;( q( T2 @! Z1 @1 N# }* R
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
* M; r& w. L0 l% Q6 t7 U      GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
+ r& N8 Z( h; }0 Y1 R5 T     GPIO_Init(GPIOB, &GPIO_InitStructure);- n3 z5 @# q6 P* C
       GPIOB->BSRR = GPIO_Pin_5;
  a" H3 v) ~) B; b( u+ K}- ?8 c* c; }; ^. f
int main(void)! d) P/ I% M( ?" X9 ?. \
{ uint8_t i;       5 P5 r! g- \; Q3 Q& c" u
  char const *ch;( }' s" g" o" b8 _: L" G
  SystemInit();
4 I7 C& j8 f& H. d2 _7 N$ L  Nvic_Init();
% a0 l( H/ a9 ]3 j  GPIO_Configuration();
: V# C: J# D% A4 R& E  LED_Init();
/ P/ B( x2 f& x7 A. V  Uart_Init();0 O0 O8 J, Z1 M9 T% X$ V8 ?  n* ~
  lcd_init();$ g+ G# X, W2 o9 k1 j9 |
  lcd_clr();
9 q: X6 b; j* X0 h5 a2 |7 L5 }4 I   Screen();
; ?/ e3 A; K! Y- A: Q       for(i=0;i<100;i++)Uart_buf='\0';
2 e" n! Q7 M. G( o/ k        USART_ClearFlag(USART1, USART_FLAG_RXNE);
9 R( m: i* l. z+ k/ N6 N    Rx_count=0;
4 A! u5 A: p3 t7 c    printf("AT+RST\r\n");           //重新启动5 S( P" D. m( {8 L* ]) b
    echo(0);6 R7 |; Q  H7 i/ V2 t
     printf("AT+CWMODE=2\r\n");     //AP模式
( Y; j* F- W( S" _     echo(0);, Y4 J4 O! f2 a8 N9 p- B$ _0 m( T
       ch = ( char const *)&(CWSAP);//AT+CWSAP="NUCLEO072","0123456789",11,0  ,通道号11
( y+ ?: H& T7 A, ^& ?       printf(ch);
) r# u/ ]% v! L' @       echo(0);
2 t$ G5 j1 t4 c: O( V; B       printf("AT+CIPMUX=1\r\n");                                   //开启多连接, ]3 Y1 T% F% V. B' \( ]! Y
       echo(0);
+ n0 ]0 {5 W, T  {       printf("AT+CIPSERVER=1,8080\r\n"); //开启服务器模式1 S2 I, ^6 g6 {9 Z# p
       echo(0);: b/ |( v' F* e2 x0 Q
       printf("AT+CIFSR\r\n");        //返回模块地址
$ |4 U" H: r( K       echo(0);
3 H0 [3 h0 a  y5 I3 Y  while(1); O* j" s& ?  |2 P0 D  Y% U" a$ z- _+ B
       {
% i6 T% {- p  @5 Y+ @* ~5 m              if(Flag==1)   
. J( w( J6 l: Q9 Y/ A            echo(1);  d' x8 P# L  A+ Y* Y6 |
  }4 |5 y' T5 }1 X. j7 D
}
. s2 Z7 e9 o, X7 t0 X* `9 b

3 }) g* r% |7 X2 P% ~
. q. F0 U" l8 M" [, Y/ w4 d2 E4 @4 N) Q4 x2 h7 O0 p
wenyangzeng 回答时间:2015-1-21 13:51:20
wu1169668869 发表于 2015-1-21 12:090 S8 y4 ]& F/ z
不知道那个串口wifi功耗怎样?8 O" B9 ]4 w  |& Y
而且速率那么低的情况可以考虑zigbee做,传输距离更远 ...
& ^  f) a2 U1 v# L8 `2 F8 J
耗电不小,发射时要几百毫安的。
沐紫 回答时间: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:024 c8 x4 g/ o& V% Q8 {) N# w8 _
在楼主这里,新认识了Wifi模块ESP8266。学习~
4 q1 |5 Z- [6 ~6 N! c8 x+ Q
我也觉得是,呵呵
沐紫 回答时间: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功耗怎样?
* }1 u* }/ r' A而且速率那么低的情况可以考虑zigbee做,传输距离更远
1234下一页

所属标签

相似技术帖

官网相关资源

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