【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> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </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> </p>
<p> </p>
<p>然而下载下来是这样的:</p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p>也就是<strong>B-U585I-IOT02A</strong>和<strong>STM32H573I-DK</strong>的固件。下面两个是通用固件?</p>
<p>或者有大神可以移植到STM32H7S78-DK?</p>
<p> </p>
<p>(<strong>B-U585I-IOT02A的官方例程</strong>)</p>
<div></div>
<p> </p>
<p> </p>
<p>尝试用官方网站的UART升级办法,得到的是串口错误信息。</p>
<p> </p>
<p>尝试到最后只能放弃。</p>
<p> </p>
<p>只能选择ESP8266,</p>
<p> </p>
<p>眼尖的你可能已经看到了,扩展板上有ESP-01插孔。</p>
<p>淘宝买了个ESP8266模块(5元包邮)</p>
<p> </p>
<p>结果问题又来了。</p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p>看到了吗?STMOD+(CN3) UART7的RXT和TXD引脚跟SPI4是共用端口,而且是<span style="color:#e74c3c;"><strong>没有焊接的</strong></span>(DNF,DNP是英文(Do Not Populate)的意思,译为“不焊接”。)</p>
<p> </p>
<p>那就干脆,把SB1、SB5焊接起来,测试果然OK。</p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p>回到ESP8266.</p>
<p>3V3 RST EN直接短接,要保持高电平。</p>
<p> </p>
<p> </p>
<p> </p>
<p>剩下的就是程序来完成配置了(通过AT指令)。</p>
<p> </p>
<p> </p>
<p>本程序的基本思路是。</p>
<p> </p>
<p>通过扩展版USRT7 TXD——>AT指令配置并获取时间——>USRT7 RXD 获取数据——>进行数据加工,单独摘出时间——>虚拟串口USRT4 TXD——>PC 串口助手显示时间(也可以在上一步直接通过开发板的LCD显示时间)</p>
<p> </p>
<p>关于串口部分的测试,详见前贴,本例要同时开启UART4(——>虚拟串口)和UART7(——>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> </p>
<p> </p>
<p> </p>
<p> </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> </p>
<p>核心的AT代码是:</p>
<p>unsigned char UART_BUF4[] = "AT+CIPSTART=\"TCP\",\"tianqiapi.com\",80\r\n";</p>
<p>unsigned char UART_BUF5[] = "AT+CIPSEND=5\r\n";</p>
<p>unsigned char UART_BUF6[] = "GET\r\n";</p>
<p> </p>
<p> </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(&huart7, UART_BUF0,sizeof(UART_BUF0));
HAL_UART_Transmit(&huart7,UART_BUF1, sizeof(UART_BUF1),1000);
HAL_Delay(1000);
HAL_UART_Transmit(&huart7,UART_BUF2, sizeof(UART_BUF2),1000);
HAL_Delay(1000);
HAL_UART_Transmit(&huart7,UART_BUF3, sizeof(UART_BUF3),1000);
HAL_Delay(1000);
HAL_UART_Transmit(&huart7,UART_BUF4, sizeof(UART_BUF4),1000);
HAL_Delay(100);
HAL_UART_Transmit(&huart7,UART_BUF5, sizeof(UART_BUF5),1000);
HAL_Delay(100);
HAL_UART_Transmit(&huart7,UART_BUF6, sizeof(UART_BUF6),1000);
HAL_Delay(100);
HAL_UART_Transmit(&huart7,UART_BUF7, sizeof(UART_BUF7),1000);
HAL_Delay(1000);
for(int i=175;i<200;i++)
{
UART_BUF00=UART_BUF0;
}
HAL_UART_Transmit(&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(&huart7,UART_BUF1, sizeof(UART_BUF1),1000);
}
/* USER CODE END 3 */
}</code></pre>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p>此部分就是进行数据加工,单独摘出时间</p>
<p>for(int i=175;i<200;i++)</p>
<p>{</p>
<p> </p>
<p>UART_BUF00=UART_BUF0;</p>
<p>}</p>
<p> </p>
<p> </p>
<p>UART7串口中断函数:</p>
<pre>
<code>void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
HAL_UART_Receive_IT(&huart7, UART_BUF0,sizeof(UART_BUF0));
}</code></pre>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p>运行结果如图,时间与北京时间有8小时差别(时区原因),后续再优化了。</p>
<p> </p>
<p>本次分享就到这里。</p>
<p> </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> <p>这个wifi模块的驱动库还真有点基础才能研究起来呀。</p>
lugl4313820 发表于 2024-10-7 09:10
这个wifi模块的驱动库还真有点基础才能研究起来呀。
<p>没错,不过有B-U585I-IOT02A和STM32H573I-DK开发板的WIFI例程,移植过来应该不难就是要花时间钻研。</p>
cc1989summer 发表于 2024-10-7 09:15
没错,不过有B-U585I-IOT02A和STM32H573I-DK开发板的WIFI例程,移植过来应该不难就是要花时间钻研。
<p>大佬搞起来,给大家打个样呀。我原来也搞过U585没看懂。</p>
<div style="text-align: center;"></div>
<p>B-U585I-IOT02A开发板,有<a href="https://bbs.eeworld.com.cn/forum.php?mod=redirect&goto=findpost&ptid=1295392&pid=3365372" target="_blank">【STM32H7S78-DK】</a>同款WIFI模块。</p>
<p> </p>
<p>而且官方有各种WIFI例程,以及便捷的WIFI固件升级方式。</p>
<p>这个模块的例程在H573上有(例程名:NX_network_wifi),主控和模块用SPI通信,而且是threadx的操作系统,写的比较麻烦</p>
电子烂人 发表于 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>
cc1989summer 发表于 2024-10-7 13:15
谢谢!我帖子里附了B-U585I-IOT02A的WIFI例程(mx_wifi),需要移植到STM32H7S78-DK
<p>我看了一下,目前貌似还没有h7s上的threadx移植好的历程,等官方出吧</p>
页:
[1]