我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 735|回复: 4

STM32 连接程序

[复制链接]

该用户从未签到

4

主题

1

回帖

0

积分

一级逆天

积分
0

终身成就奖

QQ
发表于 2017-4-19 18:49:35 | 显示全部楼层 |阅读模式
一直想把wifi模块和stm32连接起来,但是网上找了很久,并没有C语言相关的库,只有基于arduino的ESP8266 C++库,这个库是没办法直接给stm32使用的,所以自己动手丰衣足食,自己手动将基于arduino的ESP8266 C++库移植成简单的C库,方便使用,目前这个库实现了基本的功能,可以实现波特率修改,smartlink,断线重连等功能,wifi模块主要运行在STA模式。
因为原来是C++ 的库,这里我也对C++的字符串部分和串口读取部分做了修改,具体请见我的另一篇博客:
http://blog.csdn.net/liucheng5037/article/details/50504199
还有就是arduino的库的修改,之前的arduino 的 ESP8266 C++库是没有smartlink功能的:
http://blog.csdn.net/liucheng5037/article/details/50464172


本博客使用的工程及库文件下载,可直接编译使用
http://download.csdn.net/detail/liucheng5037/9401000

下面开始简单解析下这个C语言库的使用方法,具体实现方法这里就不多论述了,大家直接看程序就好了:
接口文件:ESP8266.h


[cpp] view plain copy

    [li]
    #ifndef __ESP8266_H__
    [/li][li]
    #define __ESP8266_H__
    [/li][li]
      
    [/li][li]
      
    [/li][li]
    typedef
    unsigned
    char
    uint8_t;
    [/li][li]
    typedef
    signed
    char
    int8_t;
    [/li][li]
    typedef
    unsigned
    int
    uint32_t;
    [/li][li]
    typedef
    signed
    int
    int32_t;
    [/li][li]
      
    [/li][li]
    extern
    volatile
    unsigned
    long
    sys_tick;
    [/li][li]
      
    [/li][li]
    #define RECV_BUF_SIZE  96//定义接收的缓存,尽可能的大,防止溢出
    [/li][li]
    #define TIME_OUT 100
    [/li][li]
      
    [/li][li]
    #define AI_LINK 0
    [/li][li]
    #define ESP_TOUCH 1
    [/li][li]
    #define AIR_LINK 2
    [/li][li]
      
    [/li][li]
    #define STATUS_GETIP 2 //获取到IP
    [/li][li]
    #define STATUS_GETLINK 3 //建立连接
    [/li][li]
    #define STATUS_LOSTLINK 4 //失去连接
    [/li][li]
    #define STATUS_LOSTIP 5 //未获取到IP
    [/li][li]
      
    [/li][li]
    //function
    [/li][li]
    void
    AutoLink(
    void
    );
    [/li][li]
    int
    WifiInit(
    const
    char
    *addr, uint32_t port);
    [/li][li]
    void
    timer1msINT(
    void
    );
    [/li][li]
    unsigned
    long
    millis(
    void
    );
    [/li][li]
    void
    delay(unsigned
    int
    ms);
    [/li][li]
    int
    SetBaud(uint32_t baud);
    [/li][li]
    int
    restart(
    void
    );
    [/li][li]
    int
    setOprToStationSoftAP(
    void
    );
    [/li][li]
    int
    smartLink(uint8_t  type,
    char
    *link_msg);
    [/li][li]
    int
    stopSmartLink(
    void
    );
    [/li][li]
    int
    getSystemStatus(
    void
    );
    [/li][li]
    int
    disableMUX(
    void
    );
    [/li][li]
    int
    createTCP(
    const
    char
    *addr, uint32_t port);
    [/li][li]
    int
    send(
    const
    uint8_t *buffer, uint32_t len);
    [/li][li]
    int
    recv(uint8_t *buffer, uint32_t buffer_size, uint32_t timeout);
    [/li][li]
    void
    rx_empty(
    void
    );
    [/li][li]
      
    [/li][li]
    #endif
    [/li]


先简单介绍几个函数:

void timer1msINT(void);
1ms定时器自加函数,提供库里面各个对时间有要求的函数提供基准,该函数必须有1ms定时器中断调用。
unsigned long millis(void);
返回系统当前时间,从复位开始按ms计时的时间。
int SetBaud(uint32_t baud);
波特率设置,这个很重要,一般出厂的波特率是115200,这里我们要设置成为我们需要的波特率。
int restart(void);
模块重启指令,同时也有AT测试指令在里面。
int WifiInit(const char *addr, uint32_t port);
wifi初始化系列指令,默认已STA方式初始化,在设置完波特率后需要调用此函数,内部一直循环执行,直到连接成功为止。
void AutoLink(void);
自动连接,包含smartlink连接,当自动连接不上时自动切换到smartlink连接,可以微信或ESP-TOUCH的方式连接。


下面看个demo介绍如何使用这个库:
main.c


[cpp] view plain copy

    [li]
    int
    main(
    void
    )
    [/li][li]
    {  
    [/li][li]
       
    int
    len=0;
    [/li][li]
        UserLEDInit();  
    [/li][li]
        USART1Conf(9600);  
    [/li][li]
        DBG(
    "system begin"
    );
    [/li][li]
        TIM2_Init();  
    [/li][li]
      
    [/li][li]
       
    while
    (1)
    [/li][li]
        {  
    [/li][li]
            DBG(
    "chang baud"
    );
    [/li][li]
            delay(500);  
    [/li][li]
            UartBegin(115200,&USART3Conf,&amputChar);  
    [/li][li]
            SetBaud(19200);  
    [/li][li]
            UartBegin(19200,&USART3Conf,&amputChar);
    //更改波特率到19200
    [/li][li]
            
    if
    (0 != SetBaud(19200))
    //在新波特率下检查是否成功
    [/li][li]
            {  
    [/li][li]
                
    break
    ;
    //成功就退出
    [/li][li]
            }     
    [/li][li]
        }  
    [/li][li]
      
    [/li][li]
       
    while
    (0 == WifiInit(HOST_NAME,HOST_PORT));
    [/li][li]
          
    [/li][li]
       
    while
    (1)
    [/li][li]
        {     
    [/li][li]
            
    if
    (SerialAvailable() > 5)
    [/li][li]
            {  
    [/li][li]
                len = recv(buffer, RECVBUF_SIZE, 100);  
    [/li][li]
                
    if
    (len > 0)
    [/li][li]
                {  
    [/li][li]
                    tick_3s = 0;  
    [/li][li]
                    send(buffer, len);  
    [/li][li]
                }   
    [/li][li]
            }  
    [/li][li]
            
    if
    (tick_5ms >= 5)
    [/li][li]
            {  
    [/li][li]
                tick_5ms = 0;  
    [/li][li]
                tick_3s++;  
    [/li][li]
                tick_500ms++;  
    [/li][li]
                
    if
    (tick_500ms >= 100)
    [/li][li]
                {  
    [/li][li]
                    tick_500ms = 0;  
    [/li][li]
                    LEDToggle(LED_PIN);  
    [/li][li]
                }  
    [/li][li]
                
    if
    (tick_3s >= 600)
    [/li][li]
                {  
    [/li][li]
                    tick_3s = 0;  
    [/li][li]
                   
    //定时检查连接是否正常,如果不正常,wifi复位重新连接
    [/li][li]
                   
    if
    (getSystemStatus() != STATUS_GETLINK)
    [/li][li]
                    {  
    [/li][li]
                        DBG(
    "TCP unlink"
    );
    [/li][li]
                        
    while
    (!WifiInit(HOST_NAME,HOST_PORT));
    [/li][li]
                    }
    else
    [/li][li]
                    {  
    [/li][li]
                        DBG(
    "TCP link tick"
    );
    [/li][li]
                    }            
    [/li][li]
                }            
    [/li][li]
            }  
    [/li][li]
      
    [/li][li]
        }  
    [/li][li]
    }  
    [/li]



回复

使用道具 举报

该用户从未签到

12

主题

7221

回帖

100

积分

游客

积分
100

终身成就奖特殊贡献奖原创先锋奖优秀斑竹奖

QQ
发表于 2017-4-19 19:48:39 | 显示全部楼层
回复

使用道具 举报

该用户从未签到

3

主题

3952

回帖

4658

积分

二级逆天

积分
4658

社区居民忠实会员最爱沙发终身成就奖优秀斑竹奖

QQ
发表于 2017-4-19 20:22:10 | 显示全部楼层
回复

使用道具 举报

该用户从未签到

36

主题

335

回帖

0

积分

二级逆天

积分
0

终身成就奖

QQ
发表于 2017-4-20 08:35:59 | 显示全部楼层
回复

使用道具 举报

该用户从未签到

0

主题

5014

回帖

16

积分

二级逆天

积分
16

社区居民终身成就奖优秀斑竹奖

QQ
发表于 2017-4-20 08:58:49 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

论坛开启做任务可以
额外奖励金币快速赚
积分升级了


Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

平平安安
TOP
快速回复 返回顶部 返回列表