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

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

[复制链接]
wenyangzeng 发布时间:2015-1-7 21:51
本帖最后由 wenyangzeng 于 2016-12-16 16:23 编辑 - G3 G$ k9 V9 g' Y5 K

. K, N& P) A( S4 x$ H
     1、简介
       随着互联网技术的飞速发展,Wifi无线数据传输技术也随之不断发展成熟。而采用意法半导体的STM32系列单片机应用在Wifi无线数据传输中,能发挥STM32单片机的优异性能、缩短开发周期、产生较好的经济效益。
2、主要功能
根据wifi信号传输的特点,由1台STM32单片机开发板工作在AP模式,作为服务器使用,其余STM32开发板工作在STA模式,做客户端使用。单片机之间的数据交换采用Wifi无线通讯来进行。可以应用在楼宇消防报警,也可以应用在无公害种植基地的温度、湿度的分散采集传输、集中监控等。优点是通讯无需敷设电缆,降低了项目投资成本,且作为数据采集的客户机,完全可以根据实际应用的要求将整个PCB板制作成mini结构,更方便现场安装。缺点是不适合较长距离通讯。
3、实施方案
+ ^* T0 j* c+ b7 F4 O8 E3 `
(1)AP主机:
    用1块开发板配置服务器TCP SERVER,用多台开发板配置客户机 TCP CLIENT,原则上所有开发板硬件配置都相同,都可以选用STM32F072 Nucleo开发板或其他的STM系列机型,本方案中在作为服务器的开发板上还配置了320*240图形点阵的液晶模块,用来显示工作状态和传输信息内容。我在上一贴使用的STM32F072 Nucleo开发板实验用的320*240液晶屏未拆除,刚好利用成为临时终端显示使用。(图1)
* T1 b) j- Z7 o1 E
服务器.jpg
                           图1  STM32F072 Nucleo开发板
9 X/ @2 l/ k3 l" ?5 y, H4 i
     (2)客户端机
      手头1块STM32F103C8-PKT用来配置成客户端使用,板上有一个电位器原设计连接STM32F103C8的ACD通道1,刚好用来采集数据。PA9和PA10经过跳线与232转换芯片连接,取下跳线刚好供ESP8266的URXD、UTXD连接。见图2。
       在实际应用设计中当然还应当添加按键、蜂鸣器报警等外设。
! X+ a; m8 T2 Q3 B, m" k
客户机.jpg
                          图2 STM32F103C8-PKT开发板

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

6 M5 B1 W" e: z0 P
    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
/ x: e3 Z6 m* y  @9 q5 m0 O2 p# s
    在STM32F072 Nucleo开发板的液晶屏幕上我将上述指令返回信息显示在屏幕上,当第7条指令返回信息:“192.168.4.1   OK”则表示服务器端已经配置成功。
! h6 m: A& r% `! Q; l8 y
   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发送时的闪烁。

" @8 N3 ]( V  }6 Q% A5 I, O) F! g* H
. q5 ]( I' v- ~) S, i

0 J- v. _, ]9 {

评分

参与人数 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 编辑
' Y# p- X8 A( x* b1 S( V& C
, L: R( J7 l/ W* `上个视频0 Y% O* j) a( k7 g$ _9 ^
一手操作一手摄像,图像摇晃,对不起。
1 \# C! O3 p+ J2 L( O4 i  X- D, [6 A! w5 t
https://v.youku.com/v_show/id_XODY3MDkwODMy.html
- `4 |8 @, O5 V* ^
% `5 c' c  R' j4 a% O7 ~. e' U; S! T( P1 n" y7 ~
wenyangzeng 回答时间:2015-1-7 21:51:32
本帖最后由 wenyangzeng 于 2015-1-19 11:54 编辑 8 J) v9 u, b2 U# O0 B9 ^- B( x" C( h
  s, a2 x7 L( ]0 J7 I5 Z
  因为我使用的液晶模块估计与大家使用的不兼容,代码就不全部放上,只放关键代码了。
6 F; t: K& n+ n9 g+ J9 `) u  R客户端:
% K* V" q, v3 R# H6 A" _. Y% \7 B- N#define ADC1_DR_Address    ((uint32_t)0x4001244C)
( s2 ?0 F* P/ l9 yADC_InitTypeDef ADC_InitStructure;1 ?3 \. H/ I' k9 n' G5 M
DMA_InitTypeDef DMA_InitStructure;
! y* [% R6 t: p0 ~, ?$ s* ?__IO uint16_t ADCConvertedValue;& b' E) j0 R$ n  W* Q
__IO uint16_t Rx_count=0;
: e  t9 n5 m$ f# W# H) Q/ l9 \- ]__IO uint8_t Uart_buf[100];8 r- E+ i  l- L9 Q1 l8 b
uint32_t tmp;
9 w7 M5 _8 Z$ B7 z  \6 v+ V+ `8 Achar TempSensor[10];
% w6 f' B$ A/ ?# T& M% Achar const *ptr             ;
. S" [& p+ o0 f, D" ~uint8_t Flag = 0x00;& O# Z6 k0 y1 \( y  j& x/ ~7 T# m
void echo(uint8_t Number);1 P5 s3 v' e7 a6 a  v
void RCC_Configuration(void);
' k# V' i8 B, x8 ]void GPIO_Configuration(void);
; z& `& g) F1 |/ Q2 _$ w8 r7 O3 ?9 Y
0 Z# Q" c4 s2 dvoid DMA_Configuration(void)
' A/ n7 ^( N* v0 f# t; o% D$ Y{   
0 P% `7 I% Z7 ?  DMA_DeInit(DMA1_Channel1);
- o9 M7 K+ v0 t  DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;( b: N$ u+ ]6 X5 k2 C/ s: W
  DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&ADCConvertedValue;
6 h7 S* [4 M* ~  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;1 }  `/ U7 ^' a* t" Z, N
  DMA_InitStructure.DMA_BufferSize = 1;
7 ?: W. G! k8 m* D9 S/ l0 @  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
6 E% I/ O( D1 o! e7 D: W" b  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;* U2 t* ^- _: q" W4 L% n
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;+ W) x/ M! A3 b$ G5 B4 F9 w4 G
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
9 ~( [, d! u8 D" z3 }  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
7 F! O( d0 [2 p# _* f0 G. Z; J  DMA_InitStructure.DMA_Priority = DMA_Priority_High;' c* U5 j: t( h8 y) A3 }3 n$ @; ^
  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
0 [7 X" `& C  @& H3 {$ l0 k( C. w  DMA_Init(DMA1_Channel1, &DMA_InitStructure);; g0 d+ S* m( C( ]5 M) f. Z4 T
  DMA_Cmd(DMA1_Channel1, ENABLE);0 M' w9 H; Y3 Y8 N+ J
}
' M) c# f3 N& [, e$ b9 t2 r# l1 @ 5 O0 P' c9 o5 ]  Q8 }5 F: q
void ADC_Configuration(void)
5 A) E- b4 Z  B/ B! x; h. }{
# N( F9 @: N; p3 V9 X* |7 e. W" S  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
3 V0 o% X7 ?5 {1 ^  ADC_InitStructure.ADC_ScanConvMode = ENABLE;# I, h& ?# k- \/ L1 D
  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;& O: u- V+ ]2 V
  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
3 e  {' I+ f; y6 C' g  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;" Q% Y/ J  l# m1 N3 j/ p- T# \
  ADC_InitStructure.ADC_NbrOfChannel = 1;
. ?9 I2 L0 \5 S5 V8 @& ]  ADC_Init(ADC1, &ADC_InitStructure);
" J% ^; l, @/ O' ^  ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_55Cycles5);
+ Z4 o; E5 [: ~  ADC_TempSensorVrefintCmd(ENABLE);
/ ]( ?) f0 q( L  ADC_DMACmd(ADC1, ENABLE);
5 W% v" F6 b5 l/ [  ADC_Cmd(ADC1, ENABLE);* O2 n: @$ f3 O! F( C
  ADC_ResetCalibration(ADC1);1 T! i3 v9 }2 I- y. ]
  while(ADC_GetResetCalibrationStatus(ADC1));7 V' K; `8 t# p. h9 E# q
  ADC_StartCalibration(ADC1);! O. ~3 _4 e9 E3 U6 S
  while(ADC_GetCalibrationStatus(ADC1));
! k9 f& ]4 B1 f  ADC_SoftwareStartConvCmd(ADC1, ENABLE);! p  k4 E: ]  P& A) W) E0 A) c
}( c' y% k/ D# t) Y3 O5 Y
int main(void)
8 T5 u9 N! R% u% k0 c( W{uint8_t i=0;6 {+ H6 X6 C/ s0 g% j
  ADC_Config();
1 ^4 L/ u8 n% a" n5 s   DMA_Config();
7 Q( c, t) `& U6 T/ |Uart_Init();& u- m( z6 P" U+ _8 }
   Nvic_Init();
- M9 X5 k! q/ d  b; Y. }* M, ]       for(i=0;i<100;i++)Uart_buf='\0';
, L4 |/ u/ u' w$ m9 v0 `       USART_ClearFlag(USART1, USART_FLAG_RXNE);- H( N$ V$ @4 O* C, U
        Rx_count=0;
' |) ~' J# r) l5 j; W  i        printf("AT+RST\r\n");           //重新启动8 M) Y% m! n- x! h" m# b
         echo(0);
' [2 k; V8 B: W6 f; @       delay_ms(200);, w% e! Y3 ]( L9 `/ p$ ]/ F
        printf("AT+CWMODE=1\r\n");     //模式1
2 L# V: j9 `! G        echo(1);/ O# X( `2 l" ^
       delay_ms(200);
3 t. }$ W. e9 J3 b        printf("AT+RST\r\n");           //重新启动+ G) G  }: U% w# N+ S" M" u
        echo(0);7 t$ A+ Z) u6 e, f. u- Z; c
        delay_ms(500);4 K9 Z% R2 j" m' D
         ptr = ( char const *)&(CWJAP);//AT+CWSAP="NUCLEO072","0123456789"& o. Q' o5 L9 f# B- `8 h  c( O! a
              printf(ptr);
2 s, [6 m4 A# q) H         delay_ms(500);0 s" K- L7 O2 x4 z- z" @) J) g
              echo(2);$ f. X- R- e4 g5 z$ K, Q" t. a
       printf("AT+CIPMUX=1\r\n");                                   //开启多连接
! _6 a3 D4 y) k, P$ p       delay_ms(500);     
8 P2 Z( q, a* c) `% c       echo(3);
. E8 @7 C2 J( ?       delay_ms(200);5 I) Y. Y; R) L) q; L% Y
       ptr = ( char const *)&(CIPSTART);
9 n8 V5 I/ g& _3 ?8 B5 z       printf(ptr);3 I) W, H+ y$ E! {0 Y
       delay_ms(500);; A  w9 R/ r9 O% I
       echo(4);
8 D5 \  Q6 q) Y2 @4 C       TempSensor_BCD();+ s! U: e1 k3 i+ [, d" c- J3 L
        ptr=( char  *)&(TempSensor);         
( ]7 b4 d4 W1 |  \4 R        printf("AT+CIPSEND=0,10\r\n");2 V! W8 {1 K, `' N4 y  O' o$ _
        printf(ptr);
$ {- F0 N9 W3 P0 e         echo(5);
1 X! k: \% C, I* ~% i6 x2 j  while (1)3 v; ]' h3 U1 }, D' a3 e, N
       {% a6 V. N9 e9 ?" ^% l
    while((DMA_GetFlagStatus(DMA1_FLAG_TC1)) == RESET );
) d. D7 W! R3 U1 s* [: R) C    DMA_ClearFlag(DMA1_FLAG_TC1);7 G1 n1 X: s$ M, e. l
     delay_ms(100);! R( m* p" d+ _. m
     TempSensor_BCD();; y# I7 {/ I( w3 h+ m2 \* K3 {3 |/ |
      ptr=( char  *)&(TempSensor);          + q. c4 `. ]5 c1 c4 u
       printf("AT+CIPSEND=0,10\r\n");
2 S; v2 ?! Q: ~. O       printf(ptr);- u" H) x; U+ Q
        echo(5);5 K9 j: C3 @) Z6 C' o
  }1 s- q, ?& k2 N0 q/ J
}3 Z  m/ j* g2 l
服务器端6 m% C: g# s  R7 n6 i! @* T6 T! J
void Uart_Init(void)
. j1 v1 I- n( H$ _$ l{
# L) r! _5 h* ?1 @6 J        GPIO_InitTypeDef  GPIO_InitStructure;; t4 u5 L$ W% ]7 X% o' c+ l
        USART_InitTypeDef USART_InitStructure;+ z1 i) F$ N9 I
                   , n" M9 `& g' O# f
        RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOA   , ENABLE);   // 使能GPIOA端口& o" e# D. T3 Y9 s2 L( M
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);             // 使能串口1时钟$ |5 @: L: L& T5 z& K# `! H
         
2 Y1 f' B, Y) N! k        GPIO_PinAFConfig(GPIOA,GPIO_PinSource9, GPIO_AF_1);" K; F$ Q0 A, R& B0 ?
        GPIO_PinAFConfig(GPIOA ,GPIO_PinSource10, GPIO_AF_1);                          9 w6 E: i0 j& d4 t- B9 D# [
7 z% w  R& V* A/ i
        GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_9 ;                 
  F; i+ R. P- b; l8 O% O1 R3 y  k        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;
5 p5 e5 N: D/ ~  ?1 e) E        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
1 V8 R9 |& H) P" ]  B. e$ V        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;; e8 \4 y) ~  h- O& l
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  G6 ]' y6 F5 S, G3 S4 b& \, m
        GPIO_Init(GPIOA, &GPIO_InitStructure);
1 P8 ^' V! K3 _6 g1 ?$ H0 T
$ c; ?9 j( [. l* ^        GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_10;& D" n2 W/ `1 S8 b2 X+ i
             GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;
( M; c: [4 t+ }0 }7 K        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;      ( \. K1 o0 ~% R, r# c" |
        GPIO_Init(GPIOA , &GPIO_InitStructure);3 r( ~9 V) K& R( ]4 J* y0 `1 U5 t4 a8 U) ?

/ `2 C! i0 i& W: }3 j; ]        USART_InitStructure.USART_BaudRate = 9600;                                    / i, |( S! d9 b' G$ |8 m, J- |! G
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;              
  d  w$ p/ ^$ S5 f( {        USART_InitStructure.USART_StopBits = USART_StopBits_1;                        + h  F0 q# Y" P) Z, V
        USART_InitStructure.USART_Parity = USART_Parity_No;                           ; X2 f& I5 R0 q! `/ L2 u/ y
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
! f" R6 M5 h* s6 W        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;              & j" }+ ]' i' j& J9 R
        USART_Init(USART1, &USART_InitStructure);        //串口配置
: R- C5 D) V0 d( H1 c4 g; ^       5 a3 C8 i) o' B3 S8 b
        USART_ITConfig(USART1, USART_IT_RXNE,ENABLE);//打开中断   
5 f2 @6 \" F5 T" t        USART_Cmd(USART1, ENABLE);//使能串口1
. \+ s- A( N; B7 S        USART_ClearFlag(USART1, USART_FLAG_TC);
. S" G" U+ g+ Y) F      7 H9 A  Q: X" w/ z2 G) i( R# P
}2 S4 J$ l  E! F* L/ e5 D* F$ {# I8 C
void Uart_Put_Char(unsigned char c)
' v0 h% J4 K5 g5 {5 O( `' g{   
1 R; D2 ]  Y! L: b  while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);  : G0 @3 ^+ P7 N% I! _0 p  h( G
USART_SendData(USART1,c);  
- ^" g7 R7 V" K/ P, R8 ~}
3 i* c- O  Z$ O: X# p2 v/ [* _
% l" A6 V% O0 A6 [. K7 yunsigned char Uart_Get_Char(void)8 m5 s) a) a1 G0 J4 B) b
{   * |1 M: e1 S  A/ {
     unsigned char temp;5 X! r) U2 \# A7 g
     while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);1 E- l2 z" Y/ Y! F- [& z
     temp = (unsigned char)(USART_ReceiveData(USART1));
8 `! {; w( K$ g' _( R' U     return(temp);   * ]1 C* }; J$ ^
}
  r1 @: X! U  U2 E7 ^int fputc(int ch, FILE *f)
+ U& f; u/ R' r* L{; ^# A. C) a9 k& P2 g
  while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);6 m& y6 G0 J/ @( M* \2 j- i9 S  _
  USART_SendData(USART1,(uint8_t)ch);2 k# W$ ~; {0 G2 U$ A; |& U5 [: J% ~
  return (ch);
! n# X" k7 E  a8 L% {/ K7 c}
( q  F% z0 }4 `8 fvoid Nvic_Init(void)7 ~( f/ {' O0 h/ k9 I. g1 `
{
: |2 A+ X& ]' ]+ X  NVIC_InitTypeDef  NVIC_InitStructure;
% N# z) L6 }( Y+ w  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
1 D( V. Y6 U' C+ ~% m! p  NVIC_InitStructure.NVIC_IRQChannelPriority = 0x00;& k! ?; ~7 G( ^' A; n1 h9 Q# P( U: Z
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;9 K2 y1 \; ?) ^5 v, ?0 i% @+ z
  NVIC_Init(&NVIC_InitStructure);
9 [4 {+ O+ W/ |- U, q9 y) `+ a}
9 i" O' n8 r' c4 m1 {; p) r
; v5 N3 _6 u9 h5 A( j- OGPIO_InitTypeDef GPIO_InitStructure;     . F  B+ m+ S; d+ f! r; y
void GPIO_Configuration(void)
' ^( t# p& C6 M- ?{
2 J, ~! l) g/ f$ p2 b2 X8 Q
# i4 [" P1 G+ y$ \RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA|RCC_AHBPeriph_GPIOB|RCC_AHBPeriph_GPIOC, ENABLE);
0 J+ x5 s: S! ^- H& |       GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3
( Y. _9 W% s3 O8 h. z                          |GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8;8 _( R4 [$ }( P- d0 ~7 F9 W
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
/ O2 _4 s& \2 e* d      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
, w+ S2 v% L% Y( @3 s      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;% k, {/ ~2 [6 E: ~
      GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;4 ^& d. {' z/ X7 s" u" I
       GPIO_Init(GPIOC, &GPIO_InitStructure);' G* Q( n! r* f2 p
       GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_5;
2 u1 E9 l5 b/ O3 f- r9 `    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
2 r  e: @# b; }7 b      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
, t# F2 M6 l6 b      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;1 k! V8 T) ?6 R8 e: S
      GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
1 C2 Y! R  q# B' L! j8 p/ b8 i       GPIO_Init(GPIOA, &GPIO_InitStructure);- o* \+ h) B/ \" ~; w
     GPIO_InitStructure.GPIO_Pin =        GPIO_Pin_3|GPIO_Pin_5;
0 T. J) f1 [+ q! l0 @    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
0 M& Z2 K! ?+ W9 h$ G0 v      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;" T* g  \3 S. W
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
0 O2 I4 O8 q( w4 m6 n  a      GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
4 E1 Q7 E/ u) P+ N     GPIO_Init(GPIOB, &GPIO_InitStructure);( B4 m2 D  S( t8 g- G# Z% l
       GPIOB->BSRR = GPIO_Pin_5;5 C: s8 Q- g" C, v. K! I3 L0 ^
}
& R3 n7 k6 L, w# x6 [7 t0 e( w+ Qint main(void), p, {  t# v2 A# c$ ^% \6 q3 r% o
{ uint8_t i;      
2 B7 O: d' [7 t: N! F  char const *ch;$ o6 w" b9 |9 O* m% W0 i- Y
  SystemInit();
8 D( E4 o# ~8 [: D) D  Nvic_Init();+ `9 o% q, y; x+ h! O$ w7 m# I
  GPIO_Configuration();
4 [' Y' ]9 K$ G' @! p' n+ c" z  R  LED_Init();
/ B; a+ |+ M- o, A& l& q+ W  Uart_Init();
3 ?, w! x8 g! K3 }( k4 X) a  lcd_init();8 R' i! f& |# v- j1 q1 u" ^
  lcd_clr();
1 N# t2 }" ]- |   Screen();$ r% D- R( O: R0 B
       for(i=0;i<100;i++)Uart_buf='\0';
! N; F5 ]( k, v        USART_ClearFlag(USART1, USART_FLAG_RXNE);  O" Q" s+ ]! j5 J; z+ O
    Rx_count=0;0 X4 n8 u) o7 V' q9 L4 r
    printf("AT+RST\r\n");           //重新启动7 N! H  @6 V+ e9 x3 H
    echo(0);6 s! s- L4 @# j: m* g
     printf("AT+CWMODE=2\r\n");     //AP模式
5 `& h/ U& o: Q3 u! h9 c% M! ?     echo(0);9 _. C) }" J6 ^
       ch = ( char const *)&(CWSAP);//AT+CWSAP="NUCLEO072","0123456789",11,0  ,通道号11& S# C9 \  k) J5 d
       printf(ch);
8 c9 s* i8 R" f4 M/ r% ]       echo(0);8 z& }% o( N+ Z
       printf("AT+CIPMUX=1\r\n");                                   //开启多连接8 d' Y4 ~# `) V
       echo(0);( P1 n, M9 R* s" e7 }
       printf("AT+CIPSERVER=1,8080\r\n"); //开启服务器模式$ {2 u2 j+ |! V$ _% c6 f
       echo(0);
, A0 E) q/ Y8 \7 V- j- P+ N" N, i( j       printf("AT+CIFSR\r\n");        //返回模块地址; e; S2 {0 U/ i: W
       echo(0);
1 Y$ {* h% ~: S. C4 a  while(1)- W- L5 \, S! h. c1 {
       {2 {3 p7 R$ G& ^# b
              if(Flag==1)    0 A9 E  r" c( g' E  B  W# K
            echo(1);2 n7 m# H' @: |- ^: l8 _
  }
8 }/ R* u. q" l3 n& O}
( s, e, l, d: Y- z9 D( w

8 e( \9 Q$ r+ z. z' I2 l3 V1 R" t7 m3 m9 L
+ O4 M# e( X% V8 q0 {+ G
wenyangzeng 回答时间:2015-1-21 13:51:20
wu1169668869 发表于 2015-1-21 12:09
3 U! @. G) K; g% i6 H不知道那个串口wifi功耗怎样?
6 l3 a0 g6 d9 Y* F而且速率那么低的情况可以考虑zigbee做,传输距离更远 ...
3 ~# `3 k3 z! f' j7 M( |4 m0 `; v
耗电不小,发射时要几百毫安的。
沐紫 回答时间: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
* q$ N/ F) k. b在楼主这里,新认识了Wifi模块ESP8266。学习~

  }2 C% i, t8 h: I+ {6 Y: a8 Y2 B我也觉得是,呵呵
沐紫 回答时间: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功耗怎样?* e% I( L8 Q5 l8 N
而且速率那么低的情况可以考虑zigbee做,传输距离更远
1234下一页
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版