moyanming2013 发表于 2017-5-8 21:41:23

【NUCLEO-L496ZG评测】STM32CubeMX+实现ESP8266连接到云端API获取天气

非常感谢STM32社区(https://www.stmcu.org.cn/)和STM32官网(http://www.stmcu.com.cn/)!本文需要首先完成《【NUCLEO-L496ZG评测】ST-LINK驱动+STM32CubeMX+MDK-ARM开发环境搭建及调试简单程序》中的内容。1.    STM32CubeMX配置新建一个工程:在“MCUSelector”标签中选择“STM32L496ZGTx”:“SYS”选择“Trace Asynchronous Sw”调试器:说明:如果不选择调试器,有时候STM32CubeMX生成的代码会把调试端口关闭,这里为了确保工程的完整性需要把调试器选进来,另外选进来调试器也不会占用额外的程序代码。如果关闭了调试端口的功能,下次烧录程序时就需要使用IAP的方式而不能使用SWD的方式烧录了。本开发板中,主MCU外接了一个外部的低速晶振(LSE),频率为32.768。如下图示:基本上来说,针对每个开发板上的MCU,都需要至少连接一个低速的外部晶振,该晶振具备低时钟、低功耗,但是它也只能提供部分的系统时钟来源。要想完成诸如USB设备和主机的使能,往往需要外部接一个高速晶振来使得USB可以得到一个48MHz的时钟。在有些场景下,额外的高速晶振提高了成本和PCB面积占用,更重要的是使能的高速晶振还是耗电大户,但又不得不开启它。L496内部有一个特殊的时钟源MSI,该时钟不需要高速晶振就可以灵活配置以满足各类时钟需要,包含系统时钟和USB时钟等。但可想而知MSI的精度比不上外部高速晶振。但如果系统添加了外部低速晶振,ST为了提高MSI时钟的精度,在设计时,MSI时钟会参考LSE时钟,MCU硬件会自动根据LSE矫正MSI的精度,使得MSI可以满足更高精度的USB时钟源,此时就可以无需外接HSE晶振了。当然,把MSI作为系统时钟源也会提高整个系统的时钟精度。“RCC”中选择“Low Speed Clock(LSE)->Crystal/Ceramic Resonator”:后面在配置时会看到MSI自动矫正自动使能了,不选择LSE则矫正不会使能。先添加PG8和PG7为“LPUART1”,然后在“LPUART1”中的“mode”选择“Asynchronous”。说明:LPUART1串口是与ST-LINK的串口通信,ST-LINK自身又通过USB CDC类实现了一个虚拟串口VCP连接到电脑,从而电脑可以看到LPUART1的串口信息。如果新建工程时通过“Board Selector”选项选择的话,STM32CubeMX会自动添加一些配置以符合选择的Board的硬件布局,但截至目前(STM32CubeMX v4.20.1)该硬件布局给出的是错误的,包括与ST-LINK连接的串口号等。所以建议从MCU Selector开始一个STM32CubeMX工程,并手动配置各个部分,这也是针对自己PCB硬件时应该用的方法。ESP8266-01S模块是一个低成本、易使用、功能强大的WIFI通信模块,它通过串口通信,模块价格约10元人民币。如下图是ESP8266的管脚IO图:通过上图可以看出ESP8266通过串口通信,为了确保通信的完整性,需要使用3V3、RST、RX、TX、GND等5个管脚。本工程选择的通信串口是串口5:uart5,其实选择其它串口也是一样的,即使由串口5修改为其它串口也非常简单。RST是复位管脚,低电平时复位,我们默认把它配置为高定平。3V3和GND分别接入电源和地即可。配置如下述。在UART5中的mode选择“Asynchronous”,此时PD2和PC12管脚被定义,如下图:通过查看开发板的原理图可知PD2和PC12位于Zio接口的CN8上,为了方便接线,我们直接使用CN8附近的管脚接口来连接ESP8266,用PC11来连接ESP8266的RST管脚并默认置高,3V3和GND也用CN8上的管脚。如下图所示:注意:PD2是RX端口,连接ESP8266的   TX管脚,PC12是TX端口,连接ESP8266的RX管脚,这样才能完成正确的通信链路。左击“PC11”管脚,选择“GPIO_Output”,再右击“PC11”管脚,选择“Enter User Label”,填入“ESP8266_RST_OUT”后按回车键即可完成对PC11的管脚定义和自定义标签,该管脚将被默认置高,如下图示:说明:程序中使用管脚标签来引用该IO口,所以自定义一个有意义的标签有利于程序的编写和维护,做到见名知意。建议的标签名称组合为:“外设名称_功能_OUT/IN”。点击“Clock Configuration”标签,选择“Yes”,让STM32CubeMX自动调整下时钟,如果不符合还可以自己手动调:注意:一般填写HCLK为最大值,然后让STM32CubeMX自动计算其它配置。确保时钟配置如下所示:选择“Configuration”选项卡,在RCC中使能MSI时钟精度自动矫正,如果不添加LSE,此处是不能使能的:选择“LPUART1”,调整波特率为115200和8Bits字长:选择“UART5”,在“NVIC Settings”中使能“UART5 global interrupt”中断,因为ESP8266要使用中断通信方式,所以此处需要把中断打开。如下图示:选择“GPIO”在“GPIO”中选择“PC11”,然后配置State为High,此处的High既为置高来使ESP8266正常工作;按照下图配置完成PC11的值:其它都保持默认即可。点击齿轮按钮(或Project->Settings菜单),调整工程选项,如下图示:说明:如果使用其它的IDE,则只需要修改Toolchain/IDE为目标IDE即可。在“CodeGenerator”中选择“Generate peripheral initialization as apair of ‘.c/.h’ files per”,可以使得外设分别有自己的头文件和源文件,点击“OK”按钮:STM32CubeMX会自动开始生成工程(如果没有开始生成则再次点击齿轮按钮即可),生成完成后,如果完成了MDK-ARM的安装或其它IDE的安装,点击“Open Project”即可自动开启MDK-ARM工程:2.    添加基于ST-LINK的虚拟串口调试把开发板的ST-LINK的micro USB(CN1)接入电脑,此时电脑识别并添加一个虚拟串口。一般ST-LINK/V2-1会通过调试MCU:STM32F103CBT6实现2个USB设备:虚拟串口VCP和U盘,在使用ST-LINK的功能前需要安装最新的驱动,有时候还需要对ST-LINK的MCU升级固件。参考《【NUCLEO-L496ZG评测】ST-LINK驱动+STM32CubeMX+MDK-ARM开发环境搭建及调试简单程序》获取ST-LINK的驱动和固件升级方法。通过开发板原理图可知,ST-LINK是通过一个串口连接到了主MCU的串口:LPUART1,所以我们才会把LPUART1配置出来以便于通过该串口输出调试信息,输出的信息通过了ST-LINK的串口最后经过VCP被电脑的串口调试程序获取。ST-LINK与主MCU的串口通信连接图如下:打开常用的串口调试程序,比如putty,填写串口号和波特率,点击“open”打开调试串口,此时putty等待显示信息。如下图示:说明:图中电脑识别出的COM3既是ST-LINK的虚拟串口,对该串口操作会反映到主MCU的LPUART1。在putty配置项中的“Windows->Appearance->Change”中选择中文字体,在“Windows->Translation->Remote character set:”中选择“Use font encoding”可以以选择的中文字体显示信息。3.    调试wifi get weather工程需要自己添加部分代码,才能够完成wifi get weather的功能。wifi get weather的程序框图如下:要完成通过云端API获取信息,需要注册并获取云端API KEY,本文使用openweathermap.org的API获取北京的天气信息,如下图示:分别修改代码中的路由器名称、路由密码和API KEY即可完成基本的自定义过程,工程中通过ESP8266提供的HTTP GET/POST功能接受/发送消息。编译完成后开始调试程序,在memory窗口中添加“HtmlData”变量,可以查看HTTP GET返回的具体信息,调试如下图所示:通过在openweathermap.org页面中直接查询beijing的天气信息如下图:可以看出我们获取到了正确的天气信息。程序运行时的板子连接和运行如下图示:4.    总结本文详细介绍了如何使用STM32CubeMX新建一个wifi get weather工程,同时,给出了如何提高MSI的精度,高精度的MSI作为了主时钟的时钟源。还实现了通过云端API获取天气预报的功能,ESP8266通过串口与开发板连接,提供了非常友好的、易于移植的源代码,我们可以非常方便的添加各类基于云端API的应用示例。5.    参考资料.【NUCLEO-L496ZG评测】STM32CubeMX+无晶振高精度USB2.0 FS OTG详细步骤https://www.stmcu.org.cn/module/forum/thread-611658-1-1.html.【NUCLEO-L496ZG评测】ST-LINK驱动+STM32CubeMX+MDK-ARM开发环境搭建https://www.stmcu.org.cn/module/forum/thread-611614-1-1.html.openweathermap.org.NUCLEO-L496ZGand NUCLEO-L496ZG-P Schematicshttps://www.stmcu.org.cn/document/detail/index/id-217918.STM32 Nucleo-144 boardshttps://www.stmcu.org.cn/document/detail/index/id-217917 示例程序仅供参考!

Bowen 发表于 2017-5-9 17:05:04

顶起,不错,学习了

阿基米东 发表于 2017-7-11 18:37:58

厉害了!

kikyo52 发表于 2017-12-4 14:50:12

版主厉害,学习学习!

anywill 发表于 2017-12-5 07:32:27

学习了:loveliness:!

发表于 2018-11-3 10:49:21

非常感谢

永不停息 发表于 2018-11-12 11:31:32

学习了

永不停息 发表于 2018-11-12 14:12:37

学习了

sincomaster 发表于 2018-11-12 23:30:28

很好的评测,谢谢分享

dhhgvm 发表于 2019-1-13 16:25:22

谢谢分享

飞跃-344154 发表于 2019-10-2 22:13:40

这个真不错

SKY飞马男儿 发表于 2020-2-29 22:07:38

谢谢楼主分享

lyc818 发表于 2020-3-6 13:24:57

esp8266的相关驱动是从哪里获取的?

lyc818 发表于 2020-3-6 14:42:16

esp8266的相关库文件是从哪里找的

moyanming2013 发表于 2020-3-26 15:26:23

lyc818 发表于 2020-3-6 14:42
esp8266的相关库文件是从哪里找的


在这里下载最新的STM32CubeF7,
http://www.st.com/content/st_com/en/products/embedded-software/mcu-mpu-embedded-software/stm32-embedded-software/stm32cube-mcu-mpu-packages/stm32cubef7.html
你可以在解压后的CubeF7包中找到最新的WiFi库文件。尽管是针对特定开发板的,但是通信方式可选择使用串口,所以可以用于任意开发板。
参考这个帖子:
https://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=609686&extra=page%3D1%26filter%3Dtypeid%26typeid%3D24

页: [1]
查看完整版本: 【NUCLEO-L496ZG评测】STM32CubeMX+实现ESP8266连接到云端API获取天气