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

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

[复制链接]
wenyangzeng 发布时间:2015-1-7 21:51
本帖最后由 wenyangzeng 于 2016-12-16 16:23 编辑 + e# w* h# l, u; Z1 }! ^8 q" l7 ~

; O- P4 C- t/ E8 z7 A+ K# K8 d
     1、简介
       随着互联网技术的飞速发展,Wifi无线数据传输技术也随之不断发展成熟。而采用意法半导体的STM32系列单片机应用在Wifi无线数据传输中,能发挥STM32单片机的优异性能、缩短开发周期、产生较好的经济效益。
2、主要功能
根据wifi信号传输的特点,由1台STM32单片机开发板工作在AP模式,作为服务器使用,其余STM32开发板工作在STA模式,做客户端使用。单片机之间的数据交换采用Wifi无线通讯来进行。可以应用在楼宇消防报警,也可以应用在无公害种植基地的温度、湿度的分散采集传输、集中监控等。优点是通讯无需敷设电缆,降低了项目投资成本,且作为数据采集的客户机,完全可以根据实际应用的要求将整个PCB板制作成mini结构,更方便现场安装。缺点是不适合较长距离通讯。
3、实施方案

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

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

' @' R( v/ z3 a0 N* J
客户机.jpg
                          图2 STM32F103C8-PKT开发板
7 R* G& M# M) d7 G
     (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接法相同

+ M- U* r8 M! r6 N! l2 H
    (6)对ESP8266的编程和通讯协议
          对ESP8266的 编程操作是使用发送AT指令来实现的,在KEIL5环境下的串口发送用printf()函数很方便。每次对ESP8266发送1条指令后ESP8266都要返回一段数据以供用户判断发送成功与否及命令执行情况如何。这里串口接收数据采用中断方式接收,减少数据接收的错误率。由于接收的数据不定长,采用数据指针累加、延时判断接收标志位等方法来确定一次通讯过程的结束。USART与ESP8266通讯协议为波特率9600,8位数据位,1位停止位,无奇偶校验。有的ESP8266通讯波特率是115200,只要修改一下即可。
& O5 ?0 _% Y4 A* g. L5 f- _
    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
  K5 i7 C- [- |" j5 _
    在STM32F072 Nucleo开发板的液晶屏幕上我将上述指令返回信息显示在屏幕上,当第7条指令返回信息:“192.168.4.1   OK”则表示服务器端已经配置成功。
1 u( H% u8 S1 Q: H0 Z8 k7 [1 @! O
   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发送时的闪烁。
+ G; a4 N2 _2 h7 T; k7 V# C! T
* g3 F. I- }  G  v4 X8 ~
; H* d+ E4 M# v! g

评分

参与人数 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 编辑
% R3 R9 B$ \: T5 l* u) i9 N3 _. m1 X
上个视频
6 o* X4 Y' E& R' A' H一手操作一手摄像,图像摇晃,对不起。
! C# k2 [5 P0 Z! V
; z4 t6 S9 w1 q$ |( ohttps://v.youku.com/v_show/id_XODY3MDkwODMy.html
4 k9 Q) n# m: T6 ]8 x4 H4 [
: w- x% V+ a6 q+ _; @) L" U. t. y; `) ^
wenyangzeng 回答时间:2015-1-7 21:51:32
本帖最后由 wenyangzeng 于 2015-1-19 11:54 编辑 5 ^# d$ B0 p% U) L$ e. F

! J2 Z) b. I7 _, o7 I  因为我使用的液晶模块估计与大家使用的不兼容,代码就不全部放上,只放关键代码了。% P0 Y" K0 p, q5 J6 h7 P
客户端:% `' \% c  [1 `+ l& q
#define ADC1_DR_Address    ((uint32_t)0x4001244C)
  @  P( ]1 s2 ~( M8 VADC_InitTypeDef ADC_InitStructure;
, A, x5 _9 K. z! n3 QDMA_InitTypeDef DMA_InitStructure;' G9 K1 D: ?& l3 O" t! N6 y4 _8 c$ ^
__IO uint16_t ADCConvertedValue;
4 v6 \2 y* i3 T__IO uint16_t Rx_count=0;
, v2 E7 y/ j. `+ A7 x# i* p__IO uint8_t Uart_buf[100];7 Z" Y6 G: H6 w; I2 z+ G7 d
uint32_t tmp;
0 k/ ~5 o0 x& s6 P* \char TempSensor[10];( {4 C$ v* y6 f  D, ?8 j
char const *ptr             ;
/ H. T; u# V) p8 X6 b$ J7 huint8_t Flag = 0x00;
) I: P) o; X$ E. Bvoid echo(uint8_t Number);% j9 G8 M3 }0 B5 H
void RCC_Configuration(void);  ^; T' I; A. n
void GPIO_Configuration(void);/ G& L  B2 b: C, F
0 {7 L; |( w8 u. o
void DMA_Configuration(void)2 C8 X' [4 U1 }, A8 ^- }
{   
  ]* d. f6 E; s3 c# _  DMA_DeInit(DMA1_Channel1);
7 i' Y* `$ j5 l" k+ V* l# B- E4 I" V: E  DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;
0 t4 H$ y) \4 T, E8 p  DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&ADCConvertedValue;* f5 s9 u  Y: ]. }9 v
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;8 z. D; X, w7 f4 R
  DMA_InitStructure.DMA_BufferSize = 1;3 g* \7 m$ x8 T& E. h
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
( ~; v/ |' @, \1 }; G( Q  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;6 p# {) P0 F& p4 M. v# c% j' G9 f
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;0 D/ W7 B; K, j( [; ?: o- P
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;* T9 C1 q; E1 \! j) w+ A
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
) J% C% L+ b; t3 ^  DMA_InitStructure.DMA_Priority = DMA_Priority_High;9 X+ F! v# U4 X/ n3 u& X
  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;: B3 U% ]3 _% m- a0 @
  DMA_Init(DMA1_Channel1, &DMA_InitStructure);
" [3 s, d# S9 F: T  ]  DMA_Cmd(DMA1_Channel1, ENABLE);/ \7 I& F# e% E# ^7 L4 U
}! M7 B0 x% B" E7 o- ^& N7 U

" v% D/ z! r) B# I, m4 [void ADC_Configuration(void)
2 H, V3 W9 u4 \4 F{, ~/ z% `% g' B# [
  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
5 W: k$ M6 S1 q& a  u4 Q2 F  ADC_InitStructure.ADC_ScanConvMode = ENABLE;5 t, p+ p) |$ C% [/ c3 v0 r
  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
, N0 N9 H; A) o' T* c. i  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
, Q9 n3 `: Z' \  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;  N/ O( q) [- |/ O0 h! f
  ADC_InitStructure.ADC_NbrOfChannel = 1;8 d4 v4 T4 K) h/ U  a1 J
  ADC_Init(ADC1, &ADC_InitStructure);
- [, y+ |! O  j5 s/ o1 _  ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_55Cycles5);7 c  b2 U  D5 k
  ADC_TempSensorVrefintCmd(ENABLE);
) N4 l& m% \3 ^6 u& m  ADC_DMACmd(ADC1, ENABLE);- T- _" j% h! w; Z% D0 u
  ADC_Cmd(ADC1, ENABLE);9 }( ~2 K, Y8 \: x4 I+ D. I
  ADC_ResetCalibration(ADC1);
0 n8 b" @: S2 f/ u  while(ADC_GetResetCalibrationStatus(ADC1));
+ w* `! F7 A- k0 Q) T5 \. m% k  ADC_StartCalibration(ADC1);
: u: x% c- O+ L0 f4 O  while(ADC_GetCalibrationStatus(ADC1));
3 c; W1 ]6 T) B& K6 t  ADC_SoftwareStartConvCmd(ADC1, ENABLE);
- v) A# v& }/ h  u* z% N}
+ F- c1 c0 D$ ^- z! }+ Dint main(void)6 x/ T# @! m$ i7 K; H' f
{uint8_t i=0;
5 K7 O8 U; e% w, f. ]  s4 i& S  ADC_Config();. J! Y) R; H" P
   DMA_Config();
* w) `6 }. h. t) g5 uUart_Init();4 D5 J2 f/ }- ^( Y8 b( |0 ?
   Nvic_Init();
) U0 x( z- H. U/ q- \" t2 P       for(i=0;i<100;i++)Uart_buf='\0';/ C1 N; |& s& L) b9 Y4 z3 W6 Q0 p
       USART_ClearFlag(USART1, USART_FLAG_RXNE);
! n& s6 ]7 B0 r& P& \" R3 D        Rx_count=0;
  m9 D* o! W/ ^, w" b) O9 C* z$ f        printf("AT+RST\r\n");           //重新启动/ N- p) Q7 n- t6 C9 u0 B
         echo(0);* N- t6 |' o8 L: I
       delay_ms(200);- V3 L8 H3 F2 b
        printf("AT+CWMODE=1\r\n");     //模式1
4 e/ l9 ?( v' w        echo(1);
- g3 t& ]# g. I( x       delay_ms(200);5 ?& l1 C0 Z' C. D# D* N0 \
        printf("AT+RST\r\n");           //重新启动
9 {7 R. o+ ?2 x5 f8 a' R( D6 u: f+ a+ `        echo(0);
& r5 C- P- [- U$ k        delay_ms(500);
, u3 ], j% I4 ?/ x$ d         ptr = ( char const *)&(CWJAP);//AT+CWSAP="NUCLEO072","0123456789"
* W" ]# _2 M) y; G' y              printf(ptr);
3 j# w2 s: g1 @! E         delay_ms(500);! j6 V# ?# z  w
              echo(2);, d. C. H+ f& W
       printf("AT+CIPMUX=1\r\n");                                   //开启多连接
' u6 i% O5 w0 o/ x2 A# u' T/ M$ R# g       delay_ms(500);     
* c6 s! K: p' E5 N# M. u+ w       echo(3);$ Q$ c; W% Z) ?& h! @: B0 b
       delay_ms(200);- N) c$ n, E$ B3 m2 l) j! b$ B7 w1 B' ?
       ptr = ( char const *)&(CIPSTART);* N- N1 O. _$ V# c) z  L
       printf(ptr);
7 [; P+ w1 ?' F9 V* r/ M- a; ~) n       delay_ms(500);
) N% g( r: y  k0 H( U, a8 i       echo(4);
- N" E+ c& @9 K& m; l       TempSensor_BCD();
5 O# J  B% S* D8 X4 [# X# I; t        ptr=( char  *)&(TempSensor);          # D9 w  W7 V) Q- r$ L
        printf("AT+CIPSEND=0,10\r\n");$ O) n4 i5 v. p3 f7 M5 s% U# d
        printf(ptr);
9 r3 q9 [- [0 @9 I         echo(5);, w' ~  B6 @  n7 ?7 X) N
  while (1)
5 k/ G0 r( `( H8 `3 e       {
& A5 }% Q3 b- Y! x& H& Y9 N: f) a1 n& D    while((DMA_GetFlagStatus(DMA1_FLAG_TC1)) == RESET );& b' ^9 v5 A5 w) Z
    DMA_ClearFlag(DMA1_FLAG_TC1);
8 S7 k( J3 h2 Y* U) L' @" Z     delay_ms(100);1 |7 @6 |9 B' _( s/ `
     TempSensor_BCD();+ g0 I2 a0 a* A! W3 t7 j! C* V
      ptr=( char  *)&(TempSensor);         
1 d  D3 P5 z1 R" }! R       printf("AT+CIPSEND=0,10\r\n");
# E; y- a; z/ c7 w6 w9 e0 o       printf(ptr);
/ f3 G5 m  ]* t- K8 ]: ]4 D        echo(5);3 _0 d4 }0 c' @) L
  }
8 w2 @, D; K4 L  e9 Z}% p$ Q+ c  j: `
服务器端3 p. a- q: V1 a! u) C3 c' N, a
void Uart_Init(void)
+ W+ w9 l2 V( X" H9 \* z; J2 M{
, X4 t2 S3 u; r, R        GPIO_InitTypeDef  GPIO_InitStructure;
0 a/ A" n/ k8 J4 i+ S9 S        USART_InitTypeDef USART_InitStructure;
' s, b5 w1 A3 [                   % I% Z/ T- ]* f& y; H
        RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOA   , ENABLE);   // 使能GPIOA端口# f" p. I+ H+ F4 h# m
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);             // 使能串口1时钟. L, K' q- Z5 e0 t  w6 L2 M* a1 [
         
" H8 ]$ S5 P6 i/ m- ?8 j! U        GPIO_PinAFConfig(GPIOA,GPIO_PinSource9, GPIO_AF_1);* i& `& P) a2 b. E! W
        GPIO_PinAFConfig(GPIOA ,GPIO_PinSource10, GPIO_AF_1);                          3 X) K, ^+ [9 g

; A; L' I, ^. e( |$ `7 h: d        GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_9 ;                 
  V$ @9 \5 l( z2 J& I( q        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;- S0 f' _4 P- n6 {7 o5 P
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
/ C+ }, {/ s( }$ b3 Z% T        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;, _  T) x4 B2 b  z
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;: _* g% v6 ?4 Q. N  S0 c3 ~
        GPIO_Init(GPIOA, &GPIO_InitStructure);1 N- U3 o  f% T7 H8 B( C  q& d
6 ^5 n8 h* N- l! u
        GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_10;
8 q# D0 L* p) g+ C/ X/ s" e5 C             GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;
4 Q, b9 N- P6 v2 S# \        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;      
, u  e2 S% O7 s6 D        GPIO_Init(GPIOA , &GPIO_InitStructure);" }% n2 y+ t7 [4 N1 A3 X* I

1 |+ a4 W8 ~, k; }        USART_InitStructure.USART_BaudRate = 9600;                                    
( p4 S; S" B. l        USART_InitStructure.USART_WordLength = USART_WordLength_8b;              , U& M/ F( N* q' b0 h6 n" Y
        USART_InitStructure.USART_StopBits = USART_StopBits_1;                        2 @: G$ Y( `2 x& ]) e  u
        USART_InitStructure.USART_Parity = USART_Parity_No;                           
3 g- o( O' K. ^        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
9 d- D) {1 v$ a' e$ P9 a        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;              
: F( r2 F7 a9 g  }        USART_Init(USART1, &USART_InitStructure);        //串口配置
. U* b) J' j$ L9 }: @+ [      
% {: s# k, V- y) f3 U7 |3 B        USART_ITConfig(USART1, USART_IT_RXNE,ENABLE);//打开中断   
  N$ k7 {. y4 b" I8 {* o) `        USART_Cmd(USART1, ENABLE);//使能串口1
) W5 y0 \9 _9 z$ U9 l        USART_ClearFlag(USART1, USART_FLAG_TC); 2 p5 W6 ]+ B: h- g0 p: P
      
# B* X/ \( s5 I' |3 F( J; r}9 Z) [0 \+ q- r9 {& F' k
void Uart_Put_Char(unsigned char c)( ~0 L# w% |* p& z
{   4 _+ V) J1 E  @9 n- p& R0 |
  while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);  # O7 c1 Y+ o6 p. Z/ E! K
USART_SendData(USART1,c);  * S7 D& }( q+ c- g/ G: y5 M. q6 P" T
}  m9 K9 a% ?" x0 T1 l9 b# B5 E

+ x! B# @; R8 _' W  ~8 }unsigned char Uart_Get_Char(void)
; ]2 N* D) N, |" ^: E5 S6 }{   " X' d4 x8 d3 f4 S# T' A0 p( q
     unsigned char temp;
0 ?9 z8 X; W. l2 @: e7 d, A     while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
6 Z5 g" O. A1 H+ l9 p1 `! x+ u     temp = (unsigned char)(USART_ReceiveData(USART1));7 X& z: E- O1 [( f
     return(temp);   
5 n7 @) e( a2 l6 N  {; ]2 h) `}+ W, W/ |/ R) W: n* q: [# X
int fputc(int ch, FILE *f)% S4 `$ r, s4 H) K$ a
{; T  U) m% R: Q6 v; W" i4 o1 e
  while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);2 K. z& @* S' v, x' S
  USART_SendData(USART1,(uint8_t)ch);
- k7 X0 K! D! B. h6 I  return (ch);
7 c, e' H% C1 J0 S& P) c3 Z/ h}
) I5 g' l2 S9 Y- @4 [void Nvic_Init(void)0 l* M9 q$ x( h& o. M
{
# h/ W: M  N$ M! g5 B  NVIC_InitTypeDef  NVIC_InitStructure;
; Q" W( ?. N* Y" S  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;# O" d4 X& \: {$ l$ r
  NVIC_InitStructure.NVIC_IRQChannelPriority = 0x00;% d5 r! w" l7 ]5 U( N) c. ^
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;9 C/ F( h, Q, h9 c3 [
  NVIC_Init(&NVIC_InitStructure);( k; Y# a  ~& e! D
}' j5 u( }% Q2 b

+ k0 p5 n- @/ W6 F( _, P7 l0 T4 YGPIO_InitTypeDef GPIO_InitStructure;     
- u: d2 b1 W' o7 T, [; ]( r% l5 Rvoid GPIO_Configuration(void)
5 {: i. e: X2 {7 L{
# e* V# U) [- d* X+ D# h9 [9 I: b4 I " l( l" _4 l0 f/ o, Z+ B
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA|RCC_AHBPeriph_GPIOB|RCC_AHBPeriph_GPIOC, ENABLE);9 t% f6 d( [" i: u/ X& u! J$ ~
       GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3* x& d  {  C) y. m! R& l, B
                          |GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8;8 B6 z! S  q. \  @
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;) w2 N7 g1 A1 @8 Z' C8 r  I
      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
' X9 c) e4 ?3 B7 i' C4 U      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
' ]& V  W1 j4 }      GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
5 ^( h, Y. |, R; \$ h5 ~       GPIO_Init(GPIOC, &GPIO_InitStructure);, {& F( j' M( i! J" e
       GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_5;
( w1 I, M5 J- s0 [, |- M    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
4 w% m/ S. ^/ B/ J      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;7 L( X" _# ]+ L1 v' v- K
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
/ W4 `6 _  y. W! a! w4 Q9 E      GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;- W9 G" j7 _! f; ^
       GPIO_Init(GPIOA, &GPIO_InitStructure);
$ T0 O: }6 Q1 @( e     GPIO_InitStructure.GPIO_Pin =        GPIO_Pin_3|GPIO_Pin_5;1 F' J: \0 L. M" I1 Z6 U; i9 b/ B. \  ~( `
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
, A/ p* j8 V% ]! ]      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
5 p$ O; J7 I, q0 d4 x      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
3 z9 h5 k2 X* y$ H5 z3 O7 a      GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;+ Q* D3 j6 M9 [: @  r' @+ r
     GPIO_Init(GPIOB, &GPIO_InitStructure);
0 v% z; {2 G1 q8 s1 _6 a1 l       GPIOB->BSRR = GPIO_Pin_5;6 v3 ]7 f- D. f) i# q
}* i( Z4 P/ N- p4 W! J! k
int main(void)
/ s7 r0 u" e* a/ @{ uint8_t i;      
& x3 N( [: D7 C( m) I  char const *ch;
* N3 k0 A( M/ m( s+ P: j+ T( V  SystemInit();
+ F1 A) c2 v/ [/ P) h  t- _2 g6 e  _  Nvic_Init();
1 {8 a. g8 Y# @# `  GPIO_Configuration();
6 W; a& |0 E+ H: {! r  LED_Init();: ~$ E" o" S% K+ f- t. H) M
  Uart_Init();
( R0 {* d  Z# W0 [7 c# P! `4 ]  lcd_init();+ j5 B% H' e. d( x: s
  lcd_clr();
  W2 m1 W/ X: j  z- F& f5 H   Screen();7 X! |; B5 L9 ^. U8 q
       for(i=0;i<100;i++)Uart_buf='\0';
1 F3 y/ c2 J# n8 z% d; x5 v        USART_ClearFlag(USART1, USART_FLAG_RXNE);
) K& Y* C, a1 r+ r    Rx_count=0;. L& A$ j1 h! X& m$ e$ z" d
    printf("AT+RST\r\n");           //重新启动4 t) k) |* O+ ], ?. D6 S, z
    echo(0);- L" S7 H) `/ F- d; S% @
     printf("AT+CWMODE=2\r\n");     //AP模式
& h, _" p1 {* h% y) I8 k     echo(0);
5 G% C- D2 t8 [       ch = ( char const *)&(CWSAP);//AT+CWSAP="NUCLEO072","0123456789",11,0  ,通道号11
) a1 ^- j" @8 \/ u3 E       printf(ch);
' x; _8 f& B- @! z4 J  L$ K       echo(0);$ O) k/ M9 u2 c* D$ {
       printf("AT+CIPMUX=1\r\n");                                   //开启多连接
  Y6 T; Q& d8 g- p7 v# l( p       echo(0);( s9 C2 u; O' J# Y  V
       printf("AT+CIPSERVER=1,8080\r\n"); //开启服务器模式
6 Y" [. z: `. B, ?( |. v1 w       echo(0);$ h# g1 P5 z1 K- @. n
       printf("AT+CIFSR\r\n");        //返回模块地址$ l8 f$ K/ e" K$ v9 w
       echo(0);
$ E2 d. W0 G* d9 M9 x  while(1)
* A9 G: E$ Y( P! }5 d0 s3 d       {
+ v8 R  {: b# f/ P              if(Flag==1)   
( a/ @; I! N( ^. n9 X0 R" q            echo(1);
+ i% v8 z7 t. o, F6 s6 m  }
1 H2 m! C, H/ p' C4 w/ B}
7 {) }! S4 H" m7 }$ Q
  p/ B% H# I* X' o0 }
  d" `  C6 g3 l1 m/ m* u
3 S$ j. P1 E  c3 ]+ `
wenyangzeng 回答时间:2015-1-21 13:51:20
wu1169668869 发表于 2015-1-21 12:09; ?6 y2 _, @; P' X0 p" V1 m- D, Z
不知道那个串口wifi功耗怎样?
1 C8 l  u4 K) `2 t而且速率那么低的情况可以考虑zigbee做,传输距离更远 ...
9 _9 a% E: q, Z% i) `1 J, j3 i: 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
* y9 ?5 t' s+ ?2 \, ^* T在楼主这里,新认识了Wifi模块ESP8266。学习~

) Q3 B) i8 ~2 _: Y5 \% [6 o我也觉得是,呵呵
沐紫 回答时间: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功耗怎样?) F& {& D; k# Z
而且速率那么低的情况可以考虑zigbee做,传输距离更远
1234下一页
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版