cc1989summer 发表于 2024-10-6 22:26

【STM32H7S78-DK】⑦连接WIFI获取时间(基于ESP8266)

<div class='showpostmsg'><p>看到标题,你可能要纳闷了,为什么要基于ESP8266?</p>

<p>STM32H7S78-DK不是自到了WIFI模块吗?</p>

<p>就是下图中左边的<strong>MXCHIP EWM3080</strong>(通过SPI通信与STM32H7S78-DK)</p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p> &nbsp;</p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p>然而,问题来了。</p>

<p>首先官方例程或BSP,并没有这个wifi模块的例程(或者是我没找到?)</p>

<p>其次,对于这个模块的信息只有官网有一些,ST官方提到用之前要升级固件。</p>

<p><a href="https://www.st.com.cn/zh/development-tools/x-wifi-emw3080b.html#" target="_blank">https://www.st.com.cn/zh/development-tools/x-wifi-emw3080b.html#</a></p>

<p>&nbsp;</p>

<p> &nbsp;</p>

<p>然而下载下来是这样的:</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>也就是<strong>B-U585I-IOT02A</strong>和<strong>STM32H573I-DK</strong>的固件。下面两个是通用固件?</p>

<p>或者有大神可以移植到STM32H7S78-DK?</p>

<p>&nbsp;</p>

<p>(<strong>B-U585I-IOT02A的官方例程</strong>)</p>

<div></div>

<p>&nbsp;</p>

<p> &nbsp;</p>

<p>尝试用官方网站的UART升级办法,得到的是串口错误信息。</p>

<p>&nbsp;</p>

<p>尝试到最后只能放弃。</p>

<p>&nbsp;</p>

<p>只能选择ESP8266,</p>

<p> &nbsp;</p>

<p>眼尖的你可能已经看到了,扩展板上有ESP-01插孔。</p>

<p>淘宝买了个ESP8266模块(5元包邮)</p>

<p>&nbsp;</p>

<p>结果问题又来了。</p>

<p>&nbsp;</p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>看到了吗?STMOD+(CN3) UART7的RXT和TXD引脚跟SPI4是共用端口,而且是<span style="color:#e74c3c;"><strong>没有焊接的</strong></span>(DNF,DNP是英文(Do Not Populate)的意思,译为&ldquo;不焊接&rdquo;。)</p>

<p>&nbsp;</p>

<p>那就干脆,把SB1、SB5焊接起来,测试果然OK。</p>

<p>&nbsp;</p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>回到ESP8266.</p>

<p>3V3 RST EN直接短接,要保持高电平。</p>

<p>&nbsp;</p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p>剩下的就是程序来完成配置了(通过AT指令)。</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>本程序的基本思路是。</p>

<p>&nbsp;</p>

<p>通过扩展版USRT7 TXD&mdash;&mdash;&gt;AT指令配置并获取时间&mdash;&mdash;&gt;USRT7 RXD 获取数据&mdash;&mdash;&gt;进行数据加工,单独摘出时间&mdash;&mdash;&gt;虚拟串口USRT4 TXD&mdash;&mdash;&gt;PC 串口助手显示时间(也可以在上一步直接通过开发板的LCD显示时间)</p>

<p>&nbsp;</p>

<p>关于串口部分的测试,详见前贴,本例要同时开启UART4(&mdash;&mdash;&gt;虚拟串口)和UART7(&mdash;&mdash;&gt;ESP8266 WIFI)</p>

<p><a href="https://bbs.eeworld.com.cn/thread-1295306-1-1.html" target="_blank">https://bbs.eeworld.com.cn/thread-1295306-1-1.html</a></p>

<p>其中UART7要开启中断:</p>

<p>&nbsp;</p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>关于ESP8266的使用方法,以及时间获取方式,网上有很多资料可以参考。</p>

<pre>
<code>#include "main.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "stm32h7rsxx_hal_uart.h"

unsigned char UART_BUF1[] = "AT\r\n";             //AT指令确认
unsigned char UART_BUF2[] = "AT+CWMODE=1\r\n";    //STA模式
unsigned char UART_BUF3[] = "AT+CWJAP=\"Xiaomi_D7CB\",\"密码\"\r\n";//连接wifi
unsigned char UART_BUF4[] = "AT+CIPSTART=\"TCP\",\"tianqiapi.com\",80\r\n";
unsigned char UART_BUF5[] = "AT+CIPSEND=5\r\n";
unsigned char UART_BUF6[] = "GET\r\n";
unsigned char UART_BUF7[] = "AT+CIPCLOSE\r\n";

unsigned char UART_BUF0 ;
unsigned char UART_BUF00 ;</code></pre>

<p>&nbsp;</p>

<p>核心的AT代码是:</p>

<p>unsigned char UART_BUF4[] = &quot;AT+CIPSTART=\&quot;TCP\&quot;,\&quot;tianqiapi.com\&quot;,80\r\n&quot;;</p>

<p>unsigned char UART_BUF5[] = &quot;AT+CIPSEND=5\r\n&quot;;</p>

<p>unsigned char UART_BUF6[] = &quot;GET\r\n&quot;;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>main函数代码:</p>

<pre>
<code>int main(void)
{

MPU_Config();
SystemCoreClockUpdate();
HAL_Init();

MX_GPIO_Init();
MX_UART7_Init();
MX_UART4_Init();

HAL_UART_Receive_IT(&amp;huart7, UART_BUF0,sizeof(UART_BUF0));


HAL_UART_Transmit(&amp;huart7,UART_BUF1, sizeof(UART_BUF1),1000);
HAL_Delay(1000);
HAL_UART_Transmit(&amp;huart7,UART_BUF2, sizeof(UART_BUF2),1000);
HAL_Delay(1000);
HAL_UART_Transmit(&amp;huart7,UART_BUF3, sizeof(UART_BUF3),1000);
HAL_Delay(1000);

HAL_UART_Transmit(&amp;huart7,UART_BUF4, sizeof(UART_BUF4),1000);
HAL_Delay(100);
HAL_UART_Transmit(&amp;huart7,UART_BUF5, sizeof(UART_BUF5),1000);
HAL_Delay(100);
HAL_UART_Transmit(&amp;huart7,UART_BUF6, sizeof(UART_BUF6),1000);
HAL_Delay(100);
HAL_UART_Transmit(&amp;huart7,UART_BUF7, sizeof(UART_BUF7),1000);
HAL_Delay(1000);



for(int i=175;i&lt;200;i++)
{

          UART_BUF00=UART_BUF0;
}


HAL_UART_Transmit(&amp;huart4,UART_BUF00, sizeof(UART_BUF00),1000);


/* USER CODE END 2 */

/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */

                //HAL_Delay(1000);
                //HAL_UART_Transmit(&amp;huart7,UART_BUF1, sizeof(UART_BUF1),1000);
}
/* USER CODE END 3 */
}</code></pre>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>此部分就是进行数据加工,单独摘出时间</p>

<p>for(int i=175;i&lt;200;i++)</p>

<p>{</p>

<p>&nbsp;</p>

<p>UART_BUF00=UART_BUF0;</p>

<p>}</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>UART7串口中断函数:</p>

<pre>
<code>void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{

        HAL_UART_Receive_IT(&amp;huart7, UART_BUF0,sizeof(UART_BUF0));
}</code></pre>

<p>&nbsp;</p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>运行结果如图,时间与北京时间有8小时差别(时区原因),后续再优化了。</p>

<p>&nbsp;</p>

<p>本次分享就到这里。</p>

<p>&nbsp;</p>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

lugl4313820 发表于 2024-10-7 09:10

<p>这个wifi模块的驱动库还真有点基础才能研究起来呀。</p>

cc1989summer 发表于 2024-10-7 09:15

lugl4313820 发表于 2024-10-7 09:10
这个wifi模块的驱动库还真有点基础才能研究起来呀。

<p>没错,不过有B-U585I-IOT02A和STM32H573I-DK开发板的WIFI例程,移植过来应该不难就是要花时间钻研。</p>

lugl4313820 发表于 2024-10-7 09:53

cc1989summer 发表于 2024-10-7 09:15
没错,不过有B-U585I-IOT02A和STM32H573I-DK开发板的WIFI例程,移植过来应该不难就是要花时间钻研。

<p>大佬搞起来,给大家打个样呀。我原来也搞过U585没看懂。</p>

cc1989summer 发表于 2024-10-7 12:08

<div style="text-align: center;"></div>

<p>B-U585I-IOT02A开发板,有<a href="https://bbs.eeworld.com.cn/forum.php?mod=redirect&amp;goto=findpost&amp;ptid=1295392&amp;pid=3365372" target="_blank">【STM32H7S78-DK】</a>同款WIFI模块。</p>

<p>&nbsp;</p>

<p>而且官方有各种WIFI例程,以及便捷的WIFI固件升级方式。</p>

电子烂人 发表于 2024-10-7 12:30

<p>这个模块的例程在H573上有(例程名:NX_network_wifi),主控和模块用SPI通信,而且是threadx的操作系统,写的比较麻烦</p>

cc1989summer 发表于 2024-10-7 13:15

电子烂人 发表于 2024-10-7 12:30
这个模块的例程在H573上有(例程名:NX_network_wifi),主控和模块用SPI通信,而且是threadx的操作系统, ...

<p>谢谢!我帖子里附了B-U585I-IOT02A的WIFI例程(mx_wifi),需要移植到STM32H7S78-DK<img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/loveliness.gif" width="48" /></p>

电子烂人 发表于 2024-10-8 17:31

cc1989summer 发表于 2024-10-7 13:15
谢谢!我帖子里附了B-U585I-IOT02A的WIFI例程(mx_wifi),需要移植到STM32H7S78-DK

<p>我看了一下,目前貌似还没有h7s上的threadx移植好的历程,等官方出吧</p>
页: [1]
查看完整版本: 【STM32H7S78-DK】⑦连接WIFI获取时间(基于ESP8266)