当前位置: 首页 > article >正文

记录项目基于HAL+STM32+Freertos的天气桌面(暂时就叫这个了)(day1)

简介主控STM32F103C8T6元器件ESP01S。主频为72mhz开启usart1与usart2usart1用于回传esp01s发送的信息usart2用于连接esp01s。freertos新建1个任务大小128*41个用于获取心知天气内的数据。GPIO配置图Freertos配置ESP8266.c// ESP8266.c // // Created by 25479 on 2026/3/15. // #include esp8266.h #include main.h #include usart.h #include string.h // 接收ESP8266数据调试串口 #define USART_DEBUG huart1 // WIFI连接信息 #define ESP8266_WIFI_INFO ATCWJAP\R\,\srj12345678\\r\n #define ESP8266_TCP_INFO ATCIPSTART\TCP\,\api.seniverse.com\,80\r\n uint8_t Get_Weather_IP[] GET https://api.seniverse.com/v3/weather/now.json?keyS_P6u0GEsr6Jmz4mGlocationbeijinglanguagezh-Hansunitc\r\n; // esp8266数据缓冲区 uint8_t esp8266_buf[ESP8266_BUF_SIZE]; uint16_t esp8266_cnt 0, esp8266_cntPre 0; uint8_t aRxBuffer; // 串口接收中断缓冲区 // 清空ESP8266接收缓冲区 void ESP8266_Clear(void) { memset(esp8266_buf, 0, sizeof(esp8266_buf)); // 清零缓冲区 esp8266_cnt 0; // 重置接收计数器 } // 检查数据接收状态 _Bool ESP8266_WaitRecive() { if (esp8266_cnt 0) return REV_WAIT; // 检查是否接收完成 if (esp8266_cnt esp8266_cntPre) { esp8266_cnt 0; return REV_OK; } esp8266_cntPre esp8266_cnt; return REV_WAIT; } // 发送AT指令并检查响应 _Bool ESP8266_SendCmd(char *cmd, char *res) { uint8_t timeOut 200; // 通过串口2发送AT指令 Usart_SendString(huart2, cmd, strlen(cmd)); // HAL_UART_Transmit(huart2, cmd, strlen(cmd), 1000); // 等待响应 while (timeOut--) { if (ESP8266_WaitRecive() REV_OK) { // 检查是否包含预期响应 if (strstr((char *)esp8266_buf, res) ! NULL) { ESP8266_Clear(); return 0; // 成功 } } HAL_Delay(10); // 延时10ms } return 1; // 失败 } // ESP8266初始流程 void ESP8266_Init(void) { ESP8266_Clear(); // 清空接收缓冲区 // 1. 测试AT指令 UsartPrintf(USART_DEBUG, 0. AT\r\n, strlen(0. AT\r\n)); UsartPrintf(USART_DEBUG, 1. AT\r\n, strlen(1. AT\r\n)); while (ESP8266_SendCmd(AT\r\n, OK)) HAL_Delay(500); UsartPrintf(USART_DEBUG, 0. AT\r\n, strlen(0. AT\r\n)); // 2. 重启模块 UsartPrintf(USART_DEBUG, 1. RST\r\n, strlen(1. RST\r\n)); ESP8266_SendCmd(ATRST\r\n, ); HAL_Delay(500); // 3. 设置为STA模式客户端模式 UsartPrintf(USART_DEBUG, 2. STA模式\r\n, strlen(2. STA模式\r\n)); while (ESP8266_SendCmd(ATCWMODE1\r\n, OK)) HAL_Delay(500); // 4. 关闭多路连接 UsartPrintf(USART_DEBUG, 3. 关闭多路连接\r\n, strlen(3. 关闭多路连接\r\n)); while (ESP8266_SendCmd(ATCIPMUX0\r\n, OK)) HAL_Delay(500); // 5. 连接 WiFi UsartPrintf(USART_DEBUG, 4. 连接WiFi\r\n, strlen(4. 连接WiFi\r\n)); while (ESP8266_SendCmd(ESP8266_WIFI_INFO, OK)) HAL_Delay(500); } // ESP8266获取天气数据 void ESP8266_GetWeather(void) { // 0. 清空接收缓冲区 ESP8266_Clear(); // 1 重启esp8266 // UsartPrintf(USART_DEBUG, 0. RST\r\n, strlen(0. RST\r\n)); // ESP8266_SendCmd(ATRST\r\n, ); // HAL_Delay(1000); // 2. 设置透传模式 UsartPrintf(USART_DEBUG, 1. 设置透传模式\r\n, strlen(1. 设置透传模式\r\n)); while (ESP8266_SendCmd(ATCIPMODE1\r\n, OK)) HAL_Delay(500); // 3. 创建TCP连接 UsartPrintf(USART_DEBUG, 2. 连接TCP\r\n, strlen(2. 连接TCP\r\n)); while (ESP8266_SendCmd(ESP8266_TCP_INFO, OK)) HAL_Delay(500); // 2. 透传数据 UsartPrintf(USART_DEBUG, 3. 进入发送模式\r\n, strlen(3. 进入发送模式\r\n)); // ESP8266_SendCmd(ATCIPSEND\r\n, ); HAL_UART_Transmit(huart2, ATCIPSEND\r\n, strlen(ATCIPSEND\r\n), 100); HAL_Delay(500); // 3. 发送数据 UsartPrintf(USART_DEBUG, 4. 发送GET请求\r\n, strlen(4. 发送GET请求\r\n)); // ESP8266_SendCmd(Get_Weather_IP, ); HAL_UART_Transmit(huart2, Get_Weather_IP, strlen(Get_Weather_IP), 1000); // ESP8266_SendCmd(GET https://api.seniverse.com/v3/weather/daily.json?keyS_P6u0GEsr6Jmz4mGlocationbeijinglanguageenunitcstart-1days5, ); HAL_Delay(500); } // 串口接收中断回调函数 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if (huart huart2) { // 检查缓冲区空间 if (esp8266_cnt ESP8266_BUF_SIZE - 1) { esp8266_buf[esp8266_cnt] aRxBuffer; // 存入数据 } else { // 缓冲区溢出处理 esp8266_cnt 0; memset(esp8266_buf, 0, ESP8266_BUF_SIZE); } // esp8266_cnt; // 重启接收中断 HAL_UART_Receive_IT(huart2, (uint8_t *)aRxBuffer, 1); } }ESP8266.h// // Created by 25479 on 2026/3/15. // #ifndef ESP8266_WATCH_ESP8266_H #define ESP8266_WATCH_ESP8266_H // PA3 - TX // PA2 - RX #include main.h #define ESP8266_BUF_SIZE 512 #define REV_OK 0 // 数据接收完成标志 #define REV_WAIT 1 // 数据接收未完成标志 extern uint8_t esp8266_buf[ESP8266_BUF_SIZE]; void ESP8266_Clear(void); _Bool ESP8266_WaitRecive(); _Bool ESP8266_SendCmd(char *cmd, char *res); void ESP8266_Init(void); void ESP8266_GetWeather(void); #endif //ESP8266_WATCH_ESP8266_H在usart.c中添加一下两行代码void Usart_SendString(UART_HandleTypeDef USARTx, uint8_t *str, uint16_t len) { HAL_UART_Transmit(USARTx ,(uint8_t *)str,len,HAL_MAX_DELAY); } void UsartPrintf(UART_HandleTypeDef USARTx, uint8_t *str, uint16_t len) { HAL_UART_Transmit (USARTx ,(uint8_t *)str,len,HAL_MAX_DELAY); }wifi_task.c// // Created by 25479 on 2026/3/15. // #include cmsis_os2.h #include esp8266.h #include main.h #include usart.h #include string.h void StartWIFITask(void *argument) { // ESP8266_Init(); ESP8266_GetWeather(); HAL_UART_Transmit(huart1, esp8266_buf, strlen(esp8266_buf), 1000); for (;;) { // 处理函数只需调用一次 osDelay(10); } }usart1回传显示数据显示成功后续处理注意需要在main函数中提前开始一次中断测试时出现了一个问题在反复重启单片机或者反复烧录之后导致卡死排查原因是回传函数无法触发导致esp8266_cnt一直为0但是在main.c中已经开启了中断。暂时没找出来是为什么我的解决方法是注释掉main.c中的HAL_UART_Receive_IT()烧录一次然后在取消注释再烧录一次。

相关文章:

记录项目基于HAL+STM32+Freertos的天气桌面(暂时就叫这个了)(day1)

简介:主控STM32F103C8T6,元器件ESP01S。主频为72mhz,开启usart1与usart2,usart1用于回传esp01s发送的信息,usart2用于连接esp01s。freertos新建1个任务,大小128*4,1个用于获取心知天气内的数据。…...

SpyGlass CDC检查所需的SGDC文件编写规则

SGDC(SpyGlass Design Constraints)是SpyGlass CDC检查的核心约束文件,用于明确时钟、复位、数据域、特殊路径的检查说明,确保跨时钟域分析准确、无漏检、无大量误报。本篇文章讲解实战中常用的约束语句及含义,个人总结,仅供参考。…...

MQ基础(异步通信)

文章目录day06-MQ基础 学习总结一、同步调用 vs 异步调用1. 同步调用(OpenFeign)2. 异步调用(MQ)二、RabbitMQ基础1. 核心概念2. 安装与端口3. 数据隔离三、SpringAMQP1. 功能介绍2. 工作模式2.1 简单队列2.2 Work Queue&#xff…...

Intel vGPU技术GVT-g与kvmgt实现分析和实践

Intel GVT-g & KVMGT Intel GVT-g是Intel图形虚拟化技术(Intel Graphics Virtualization Technology-graphics)的缩写,它是一种硬件辅助的GPU虚拟化解决方案,允许将一个Intel集成显卡(Integrated Graphics Processor, IGP)虚拟化为多个虚拟GPU(vGPU…...

HeBA Heterogeneous Bottleneck Adapters for Robust Vision-Language Models

HeBA: Heterogeneous Bottleneck Adapters for Robust Vision-Language Models Authors: Md Jahidul Islam Deep-Dive Summary: HeBA: 用于鲁棒视觉语言模型的异构瓶颈适配器 (Heterogeneous Bottleneck Adapters) 摘要 将 CLIP 等大规模视觉语言模型(VLMs&…...

协程学习笔记1

一、CPU密集型任务Test fun test Cpu Task()runBlocking{val startTime System.currentTimeMillis()val joblaunch(Dispatchers.Default){var nextTimestartTimevar i0while (i<5){if(System.currentTimeMillis()>nextTime){println("job:Im sleeping ${i}")ne…...

团队协作效率遭遇瓶颈?这 1 个开放式网盘生态,救活了 10 万+ 企业的文档流(含竞品实测)

在 2026 年的企业级 SaaS 市场&#xff0c;很多团队管理者陷入了一个怪圈&#xff1a;买了一堆功能大而全的“全家桶”网盘&#xff0c;结果员工依然习惯用微信传文件&#xff0c;文档躺在云端变成死数据。 为什么&#xff1f;因为真正的“生态”不是强迫用户在网盘里用简陋的…...

结构建模与数字孪生破解偏远桥梁监测难题

STAAD与iTwin提供结构建模与数字孪生解决方案&#xff0c;助力实现智能、经济高效的桥梁维护策略优化桥梁检测与维护I-15州际公路纵贯美国南加州与加拿大阿尔伯塔省&#xff0c;全长1400英里&#xff0c;仅有29英里穿过亚利桑那州最西端的莫哈维县&#xff0c;其中有15英里的路…...

Android jetpack LiveData (二) 原理篇

Android jetpack LiveData&#xff08;二&#xff09;原理篇引言源码前置分析核心类源码第一步&#xff0c;定义LiveData对象第二步&#xff0c;观察LiveData数据第三步&#xff1a; 设置LiveData数据到这里我们先总结下黏性数据的步骤&#xff1a;小结引言 上一篇我们学习了L…...

【PCIe 验证每日学习・Day13】DLLP 与 ACK/NAK 重传机制基础验证

大家好&#xff0c;继续我们「PCIe 验证每日学习・30 分钟打卡」系列。今天进入数据链路层核心&#xff1a;DLLP 帧结构、ACK/NAK 应答机制与重传验证。内容严格遵循 PCIe 规范、100% 无错误&#xff0c;讲解通俗、结构清晰、代码可直接复用&#xff0c;风格与前几日完全统一&a…...

Linux 的 cat 命令

Linux 的 cat 命令详解 命令概述 cat&#xff08;concatenate 的缩写&#xff09;是 Linux 系统中最基础且常用的命令之一&#xff0c;主要用于查看文件内容、合并文件以及创建简单文件。该命令属于 GNU coreutils 包的一部分&#xff0c;几乎在所有 Linux 发行版中都默认安装…...

burpsuite详细安装教程及功能讲解

好久不见&#xff0c;各位道友 目录 好久不见&#xff0c;各位道友 Brp Suite 介绍 正常情况下&#xff08;不使用Burp Suite&#xff09;&#xff0c;客户端与服务器的交互过程如下&#xff1a; 当加入Burp Suite时&#xff0c;客户端与服务器的交互过程如下&#xff1a;…...

春日桌搭新首选!ROG魔霸9 Mini:3L 迷你机身,塞下锐龙 9+RTX5070

三月春意渐浓&#xff0c;很多人都开始给自己的桌面焕新升级&#xff0c;而一款体积小巧、性能够强的主机&#xff0c;绝对是桌搭升级的核心。最近 ROG 推出的魔霸 9 Mini 电竞迷你主机&#xff0c;就精准命中了玩家与办公人群的核心需求 —— 仅 3L 的超小体积&#xff0c;却塞…...

Qt导航栏组件A03:VS Code 风格的图标侧栏

目录 一、引言 二、最终效果预览 三、核心实现原理 3.1 布局结构设计 3.2 核心技术点 四、代码实现详解 4.1 项目结构 4.2 导航组件的核心代码 4.3 样式表设计 五、总结 5.1 核心要点回顾 5.2 学习建议 源码下载 系列编号:A-03 导航风格:只有图标的侧栏 适用场景:IDE、编辑器…...

计算机毕业设计源码:Python贝壳租房数据可视化与智能推荐系统 Scrapy爬虫 可视化 推荐系统 大数据 数据分析 大模型 房源 房子(建议收藏)✅

博主介绍&#xff1a;✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ > &#x1f345;想要获取完整文章或者源码&#xff0c;或者代做&#xff0c;拉到文章底部即可与…...

深度探索Fluent中的电弧、激光与熔滴一体化模拟

Fluent电弧&#xff0c;激光&#xff0c;熔滴一体模拟。 UDF包括高斯旋转体热源、双椭球热源&#xff08;未使用&#xff09;、VOF梯度计算、反冲压力、磁场力、表面张力&#xff0c;以及熔滴过渡所需的熔滴速度场、熔滴温度场和熔滴VOF。初识激光熔化沉积&#xff1a;一场材料…...

电-气-热综合能源系统节点能价计算方法研究

基本文献复现-计及碳排放成本的电_气_热综合能源系统节点能价计算方法研究 真正做到了电热气潮流耦合&#xff0c;很适合综合能源系统建模的初学者&#xff0c;配合复现论文。 运行程序HeatGasPowerCombination即可。 每个系统模型都有专门的文档讲解&#xff0c;程序注释齐全。…...

香草纪元开服教程:使用云鸢联机平台快速搭建“食旅纪行”服务器(高配推荐版)

你是否喜欢原版风格&#xff0c;热爱收集&#xff0c;渴望在minecraft中休闲养老&#xff1f;你是否喜欢眼前一亮的各种新奇模组&#xff0c;热爱探索&#xff0c;打造神器征战各种boss&#xff1f;你是否在找一个农夫乐事大型养老包&#xff0c;想在mc里做个美食家&#xff1f…...

增程式电动汽车自适应ECMS能量管理策略:基于工况的Matlab实现方案

增程式电动汽车基于工况的自适应ECMS能量管理策略&#xff08;matlab的m程序&#xff09; 最近试驾某品牌增程式电动车时&#xff0c;发现一个有趣现象&#xff1a;堵车时增程器几乎不启动&#xff0c;而上了高速却像开了狂暴模式。这背后的能量管理策略有点东西&#xff0c;今…...

Comsol锂枝晶模型:锂枝晶生长与锂离子浓度、电势分布的模拟

comsol锂枝晶模型 Comsol 锂枝晶生长模型&#xff0c;锂枝晶生长&#xff0c;锂离子浓度分布&#xff0c;电势分布 此链接是随机形核生长锂电池实验室里最让人头疼的玩意就是锂枝晶。这货像金属胡须一样野蛮生长&#xff0c;动不动就刺穿隔膜搞短路。去年用COMSOL建锂枝晶模型时…...

基于改进蛇优化算法(GOSO/ISO)优化极限梯度提升树的时间序列预测

基于改进蛇优化算法(GOSO/ISO)优化极限梯度提升树的时间序列预测(GOSO/ISO-XGBoost) 蛇优化算法SO是2022年提出的新算法&#xff0c;性能优异&#xff0c;目前应用较少&#xff0c;改进蛇优化算法GOSO/ISO应用更少&#xff0c;适合PAPER 改进点1为在初始化种群引入混沌映射&…...

大厂ZigBee射频芯片CC2430反向电路探索

大厂ZigBee射频芯片CC2430反向电路 学习方法是&#xff1a;可以直接查看里面的电路结构&#xff0c;还有管子的宽长比参数等。 拿到原理图之后需要自己换成自己所持有的PDK就可以跑仿真了&#xff0c;国内大部分公司都是这样设计芯片产品的&#xff0c;参考价值非常大&#xff…...

Matlab实现频率切片小波变换(FSWT)绘制时频图

Matlab进行频率切片小波变换(FSWT)源代码&#xff0c;将一维信号生成时频图。 输入信号可以是任何一维信号&#xff0c;心电信号、脑电信号、地震波形、电流电压数据等。 相比连续小波变换(CWT)&#xff0c;频率切片小波变换(Frequency Slice Wavelet Transform,FSWT)是一种更具…...

Prompt工程深度揭秘

&#x1f3af; Prompt工程深度揭秘&#xff1a;AI的"说明书"是如何进化的 从简单指令到复杂工程&#xff1a;理解Prompt如何让AI变得"听话" 你是不是好奇&#xff0c;这些这么多的新东西&#xff0c;他们在使用的时候不都是一堆提示词嘛&#xff0c;那分裂…...

飞轮储能系统建模详解与MATLAB仿真实践(含永磁同步电机驱动模型)含多种模型与建模仿真指南

飞轮储能系统的建模与MATLAB仿真 飞轮储能系统的建模与MATLAB仿真&#xff08;永磁同步电机作为飞轮驱动电机&#xff09;含详细建模文件 内含两个飞轮储能模型&#xff1a;模型一的机侧网侧分开运行&#xff0c;附54页建模仿真说明&#xff1b;模型二的机侧网侧同步运行——内…...

基于全阶磁链观测器的异步电机矢量控制

基于全阶磁链观测器的异步电机矢量控制全阶磁链观测器的主要思想是将异步电机模型作为参考&#xff0c;把状态估计的方程作为可调节部分。 这两部分具有相同物理意义的输出量&#xff0c;利用两个部分的输出量误差再经过反馈校正通道对状态观测值进行修正&#xff0c;使观测值快…...

高级特性之dubbo超时机制及集群容错机制

当服务消费者要进行消费的时候&#xff0c;这个时候它可能就开启一个线程去调用服务提供者的具体实现&#xff0c;等他返回相应的结果&#xff0c;这个时候由于网络的问题或者服务端并不可靠&#xff0c;它会在这阻塞很长的一段时间。如果这个服务一直有人在调用那么就会开一堆…...

西门子S7-1200 PLC工业污水处理系统:基于博途V13sp1的WinCC画面组态与仿真报告

西门子工业污水处理系统&#xff0c;plc污水处理系统&#xff0c;基于plc的污水处理系统&#xff0c;系统采用s7-1200PLC设计&#xff0c;博途wincc画面组态。 包括plc触摸屏组态画面及仿真&#xff0c;报告等 博途V13sp1编程&#xff0c;V13sp1以上版本可以打开工业污水处理系…...

事件触发控制代码及其对应参考文献

事件触发控制代码对应参考文献 1.2023IEEE TRANS 顶刊基于事件触发的深度强化学习自动驾驶决策&#xff08;CCF-A&#xff09; 2.多智能体分布式系统的事件触发控制 3.基于观测器的非理想线性多智能体事件触发的跟踪一致性 4.非线性不确定扰动多智能体系统固定时间事件触发一致…...

实测对比后!千笔AI,开源免费降重首选

在AI技术迅速发展的今天&#xff0c;越来越多的学生和研究人员开始依赖AI工具辅助论文写作。然而&#xff0c;随着知网、维普、万方等查重系统不断升级算法&#xff0c;以及Turnitin对AIGC&#xff08;人工智能生成内容&#xff09;的识别愈发严格&#xff0c;AI率超标问题已成…...