缺铁有什么症状| 什么快递可以寄宠物| 藏青和藏蓝有什么区别| 火车硬卧代硬座是什么意思| 318什么意思| 雪貂吃什么| 酒糟鼻买什么药膏去红| 口腔医学技术是干什么的| 什么穿针大眼瞪小眼| 睡觉趴着睡是什么原因| 寓言故事有什么| 怀孕10多天有什么症状| 胃疼什么症状| 皮肤变白是什么原因| 珊瑚是什么| 嗝什么意思| 梦到别人结婚是什么意思| 七月三号是什么日子| 狗为什么不吃饭| mcm牌子属于什么档次| 跳蚤喜欢咬什么样的人| 枇杷什么味道| 药物流产吃什么药| 头疗是什么| 为什么不说话| 紫菜和海苔有什么区别| 梦到和妈妈吵架是什么意思| 眼睛肿什么原因| 荷花什么季节开放| 姚晨为什么不红了| 红霉素软膏和红霉素眼膏有什么区别| 什么茶能去体内湿气| 肺结节吃什么中药| 礼是什么意思| 莲子心有什么功效| 用激素药有什么副作用| 卷饼里面配什么菜好吃| 小腹痛什么原因| 嗓子发苦是什么原因| 低压偏高有什么危害| 茯苓有什么功效| hpv检查什么项目| 左侧肚脐旁边疼是什么原因| 愿力是什么意思| 感冒适合吃什么饭菜| 痔疮很痒是什么原因| 大荔冬枣什么时候成熟| napoleon是什么酒| 吃什么去胃火口臭| 指甲有横纹是什么原因| 对策是什么意思| 什么是特殊膳食| 6月20号什么星座| nov是什么意思| 甘肃有什么好吃的| 杜撰是什么意思| 请多指教是什么意思| 智五行属性是什么| 胃泌素释放肽前体高是什么原因| 草莓印是什么| 阴道排气是什么原因| 红肉是指什么肉| 女人长胡子是什么原因| 河北有什么市| 柯南叫什么| 美莎片是什么药| 真五行属什么| 女人左眼角有痣代表什么| 渎是什么意思| 高血糖吃什么菜好| 尿路感染要吃什么药| 红细胞低吃什么补得快| 大象灰是什么颜色| 麻雀长什么样| 不出汗的人是什么原因| 驳斥是什么意思| 1.18是什么星座| 发烧吃什么药| 子水是什么水| 同床出血什么原因呢| 等闲变却故人心却道故人心易变什么意思| 痛经挂什么科| 吃什么排便顺畅| 夹腿有什么坏处吗| 口腔溃疡挂什么科| 牙疼吃什么食物能缓解| 炒房是什么意思| 忠武路演员是什么意思| 为什么妇科病要肛门塞药| 洛阳白马寺求什么最灵| 桃子不能和什么一起吃| 球蛋白偏低是什么原因| 检查乳房挂什么科| 吃什么降糖| 浸润是什么意思| 家有一老如有一宝是什么意思| 迪士尼狗狗叫什么名字| 罗贯中是什么朝代的| 六六无穷是什么意思| 生活方式是什么意思| 69年属什么| 莫名是什么意思| 吃虾不能吃什么水果| 什么金属最贵| 鲸鱼用什么呼吸| 纤维灶是什么意思| 老是想咳嗽是什么原因| 胸部胀疼是什么原因| 什么药治失眠最有效| 什么的高楼| 心肌梗塞是什么原因引起的| 急忙的反义词是什么| pvt是什么意思| 番茄是什么| 牡丹什么时候开花| o型血容易得什么病| 铁蛋白低是什么原因| 蓝色配什么色好看| 木林森属于什么档次| 单人旁的字和什么有关| 糖化血红蛋白偏高是什么意思| 私房菜是什么意思| buffalo是什么牌子| 冰箱底部漏水是什么原因| 恩泽是什么意思| 梅子和杏有什么区别| 眼睛为什么会近视| 吃红枣有什么好处| 星座之王是什么座| 什么叫轻度脂肪肝| 拜土地公要准备什么东西| 早孕反应最早什么时候出现| 一直干呕是什么原因| 青蛙趴有什么好处| 什么人容易得尿毒症| 颈椎痛挂什么科| 血液为什么是红色的| 确认是什么意思| 80岁是什么之年| 女性脉弦是什么意思| 狗皮膏药什么意思| 吃完螃蟹不能吃什么| 保质期是什么意思| pgr是什么意思| circle是什么意思| 中午十一点是什么时辰| 清福是什么意思| 六味地黄丸什么牌子好| 被动是什么意思| 波尔多红是什么颜色| 瑞夫泰格手表什么档次| 今非昔比是什么意思| 小厮是什么意思| 小腹疼挂什么科| 趁什么不什么| 什么是余额宝| 老公的姐姐叫什么| 什么是音节什么是音序| 第二职业干点什么好呢| 急性荨麻疹吃什么药| 洗白是什么意思| a4纸能折什么| 开封有什么好玩的地方| 什么的微风填空| 有因必有果什么意思| 蛋白质是由什么组成的| 小舅子是什么关系| 肠胃不好吃什么好| 鼻子歪了是什么原因| 水痘能吃什么| 胸导联低电压什么意思| 虾不能跟什么一起吃| 什么叫中成药| imax是什么意思| 幅度是什么意思| 什么人不能吃韭菜| 什么时候可以查高考成绩| 年夜饭吃什么| 感冒全身酸痛吃什么药| 腰椎痛用什么药| 什么叫肺间质病变| 幼小衔接是什么意思| 小猫什么时候断奶| 左金丸治什么病最好| 香云纱是什么面料| 贪心不足蛇吞象什么意思| 光敏树脂是什么材料| 脚丫痒是什么原因| 什么手什么脚| 幅度是什么意思| 打嗝吃什么中成药| 实时更新是什么意思| 充气娃娃什么感觉| 老人爱睡觉什么征兆| 梦见和死去的亲人吵架是什么意思| 海水什么颜色| 经典是什么意思| 屎忽鬼是什么意思| 脑炎的后遗症是什么| 60是什么意思| 中性粒细胞偏低是什么原因| 孩子半夜咳嗽是什么原因| 什么血型| cp是什么意思| 来月经可以吃什么水果| 8月份是什么季节| 43属什么| 1984年属什么| 低压低是什么原因| 凭什么是什么意思| 什么叫高潮| 孕妇尿回收是干什么用的| 一路顺风是什么生肖| 为什么叫985大学| 验血能查出什么病| 高尿酸血症是什么意思| approval是什么意思| 奥利司他排油是什么油| 萎了是什么意思| doki是什么意思| 凝血酶是什么| 头发稀少是什么原因| 做流产手术需要准备什么东西| 骨肉瘤是什么病| 为什么会得子宫腺肌症| 酷暑的反义词是什么| 车前草的作用是什么| 茄子吃多了有什么坏处| 2020属什么生肖| 引产挂什么科| 左边小腹痛什么原因女| 安欣是什么电视剧| 什么水果泡酒最好喝| 水果之王是什么| color是什么意思| 李子吃了有什么好处| 甲亢吃什么食物好| 小什么名字好听| 做些什么| 生鱼又叫什么鱼| 耳廓上长痣代表什么| 段泥紫砂壶适合泡什么茶| 什么是槟榔| 坐北朝南是什么意思| 海参吃什么| 北京立冬吃什么| 肝火旺吃什么好| 胃溃疡a1期是什么意思| 每天喝豆浆有什么好处| 一个立一个羽念什么| 肠道易激惹综合症是什么症状| 为什么医生不推荐特立帕肽呢| 太五行属什么| 背痛是什么原因| 无蔗糖是什么意思| ccu是什么病房| 巨蟹是什么星座| 针灸的原理是什么| 氨基酸态氮是什么| 银饰为什么会变黑| 什么动物睡觉不闭眼| 复查肺结节挂什么科| 人流后可以吃什么水果| 孤是什么意思| 百度
这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 ? 论坛首页 ? 嵌入式开发 ? STM32 ? STM32G070RB探测24-ESP8266(ESP01S)http上传程序优

共14条 1/2 1 2 跳转至

STM32G070RB探测24-ESP8266(ESP01S)http上传程序优化及获取时间

高工
2025-08-04 00:02:39     打赏
这篇就上篇的post做个后续处理,发现发送之后发送之后返回数据的接收有问题,因为发送返回的发送成功数据和平台返回的数据并不是一包,按之前数据的接收处理方式会有丢包的情况,我对此进行优化,添加了双缓存处理.之前的数据是接受完包就暂停接收,直至数据用了之后才重新开始,这样会导致在数据接收后到没有处理之前的一段时间有数据发进来,就会导致DMA没打开而丢包,对此进行优化处理,使用双缓存区,DMA缓存区一直接收数据,在接收到转存到待处理缓存区,然后继续接收.下面进行程序优化百度 最后,则是强调城市社会治理。

1.修改结构体

typedef struct
{
	uint8_t dma_rx_buff[RX_BUF_MAX_LEN];//DMA缓存区
	uint8_t rec_rx_buff[RX_BUF_MAX_LEN];//REC缓存区
	uint16_t rec_len;	  //DMA接收长度
	uint16_t dma_len;	  //REC接收长度
	volatile uint8_t flag;  //用于判断是否接收完 1为接收完
}USRAT_RX;

2.修改中断接收函数

void USART1_IRQHandler(void)
{
  /* USER CODE BEGIN USART1_IRQn 0 */

  /* USER CODE END USART1_IRQn 0 */
  HAL_UART_IRQHandler(&huart1);
  /* USER CODE BEGIN USART1_IRQn 1 */
  if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_IDLE) != RESET)//产生空闲中断(说明接收完一包)
	{
		__HAL_UART_CLEAR_IDLEFLAG(&huart1);//清除空闲中断标志(否则会一直不断进入中断)
		HAL_UART_DMAStop(&huart1);//停止本次DMA传输
		usart1_rx.dma_len  = RX_BUF_MAX_LEN - __HAL_DMA_GET_COUNTER(&hdma_usart1_rx);//计算接收到的数据长度
		if(usart1_rx.rec_len>0)//证明数据未处理即还有未完成数据
		{
			memcpy(&usart1_rx.rec_rx_buff[usart1_rx.rec_len],usart1_rx.dma_rx_buff,usart1_rx.dma_len); //转存到待处理区域
			usart1_rx.rec_len += usart1_rx.dma_len;
		}
		else
		{
			memcpy(usart1_rx.rec_rx_buff,usart1_rx.dma_rx_buff,usart1_rx.dma_len);//转存到待处理区域
			usart1_rx.rec_len = usart1_rx.dma_len;
		}
		usart1_rx.flag = 1;
		if(usart1_rx.rec_len == 0)//防止误入
		{
			usart1_rx.flag = 0;
		}
		HAL_UART_Receive_DMA(&huart1, (uint8_t*)usart1_rx.dma_rx_buff, RX_BUF_MAX_LEN);//设置DMA传输,串口2的数据搬运到缓存中
		HAL_UART_DMAResume(&huart1);//恢复DMA传输
	}
  /* USER CODE END USART1_IRQn 1 */
}

3.修改清空函数

void Clear_Usart(USRAT_RX *usart_rx)//初始化(清空)串口结构体
{
	memset(&usart_rx->rec_rx_buff[0], 0, RX_BUF_MAX_LEN);//全写0
	usart_rx->rec_len = 0;
	usart_rx->flag = 0;
}

4.将之前的数据处理中的rx_buff全改为rec_rx_buff,len都改为rec_len

5.稍微修改代码

Start_Count();
OLED_Init();
AHT10Init();
Clear_Usart(&usart1_rx);//初始化串口结构体
__HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);//使能空闲中断
HAL_UART_Receive_DMA(&huart1, (uint8_t*)usart1_rx.dma_rx_buff, RX_BUF_MAX_LEN);//设置DMA传输,串口2的数据搬运到缓存中
esp_init();
/*电子产品世界*/
OLED_ShowCHinese(0u,0u,0);
OLED_ShowCHinese(16u,0u,1);
OLED_ShowCHinese(32u,0u,2);
OLED_ShowCHinese(48u,0u,3);
OLED_ShowCHinese(64u,0u,4);
OLED_ShowCHinese(80u,0u,5);
/**************/

/* USER CODE END 2 */


/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
    static uint16_t num;
    num++;
    BH1750_Send_Cmd(ONCE_H_MODE);//单次模式
    sprintf(buf,"tem:%.1f   ",pv.tem);
    OLED_P8x16Str(0u,2u,(uint8_t *)buf);
    sprintf(buf,"hum:%d%%   ",pv.hum);
    OLED_P8x16Str(0u,4u,(uint8_t *)buf);
    sprintf(buf,"lux:%d     ",pv.lux_16);
    OLED_P8x16Str(0u,6u,(uint8_t *)buf);
    AHT10ReadData(&pv.tem,&pv.hum);
    BH1750_Read_Dat(pv.lux);//读取数据
    pv.lux_16 = BH1750_Dat_To_Lux(pv.lux);//转换数据
    if(num>100)
    {
        num = 0;
        printf("lux:%d\r\n",pv.lux_16);
        printf("tem:%.1f\r\nhum:%d%%\r\n",pv.tem,pv.hum);
        OneNet_SendData();//上传数据
        HAL_Delay(200);//等待平台回复
    }
    if(usart1_rx.flag)//接收到数据
    {
        ipd_rx = ESP8266_GetIPD();//解析数据
        if(ipd_rx.len>0)//判断是否为网络下发数据
        {
             printf("\r\n\r\nipd_rx.IPD_buff:%s\r\n\r\n",ipd_rx.IPD_buff);
        }
        Clear_Usart(&usart1_rx);//清空缓存
    }
    /* USER CODE END WHILE */
    
    /* USER CODE BEGIN 3 */
}

6.烧录看结果

返回数据已经完整接收到了

发现,当发送POST数据之后,它能返回一串数据,仔细看,会发现里边有一串时间

这就是GMT时间

GMT时间就是英国格林威治时间,也就是世界标准时间,是本初子午线上的地方时,是0时区的区时,与我国的标准时间北京时间(东八区)相差8小时,即晚8小时

比如GMT时间为14:54:11,北京时间就是(15+8):54:11即为23:54:11,下面就通过字符串操作来取出这段时间,并显示在OLED上,因为我POST的速度并不是很快,所以我只截取了小时和分钟

下面上程序

if(usart1_rx.flag)//接收到数据
{
	ipd_rx = ESP8266_GetIPD();//解析数据
	if(ipd_rx.len>0)//判断是否为网络下发数据
	{
		printf("\r\n\r\nipd_rx.IPD_buff:%s\r\n\r\n",ipd_rx.IPD_buff);
		dateadr= strstr((char *)ipd_rx.IPD_buff, "GMT");//找到"GMT"
		memcpy(buf,dateadr-9,5);
		hour = (buf[0]-0x30)*10+(buf[1]-0x30);
		hour+=8;
		if(hour>23)
			hour-=24;
		min  = (buf[3]-0x30)*10+(buf[4]-0x30);
		printf("%02d:%02d\r\n",hour,min);
		sprintf(buf,"%02d:%02d   EEPW",hour,min);
		OLED_P8x16Str(0u,0u,(uint8_t *)buf);
	}
	Clear_Usart(&usart1_rx);//清空缓存
}

思路很简单就是找到GMT的位置,再往前9个字符,然后截取前5个,把小时数加8,超过23就减24,然后显示在OLED上

效果如下

http有POST了,当然不能少了GET,下篇搞一个api get获取天气,制作一个简单的桌面天气



专家
2025-08-04 16:49:19     打赏
2楼

谢谢分享!目前STM32G070RB大致涨到多少钱一片?有人知道吗?


工程师
2025-08-04 22:49:02     打赏
3楼

学到了


工程师
2025-08-04 23:27:00     打赏
4楼

学到了


工程师
2025-08-04 23:57:02     打赏
5楼

确实做的不错的


专家
2025-08-04 08:34:51     打赏
6楼

不错,学习了


工程师
2025-08-04 23:45:07     打赏
7楼

代码学的挺不错的


专家
2025-08-04 18:39:44     打赏
8楼
学习了

专家
2025-08-04 09:54:08     打赏
9楼
学到了知识

专家
2025-08-04 19:55:34     打赏
10楼
谢谢

共14条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]
冠心病什么症状表现 黄鼻涕是什么类型的感冒 因果关系是什么意思 肝囊肿是什么意思 扁桃体发炎引起的发烧吃什么药
血小板低吃什么药 9月3日是什么星座的 中医行业五行属什么 白癜风不能吃什么 坐围是什么
春天穿什么衣服 挑疳积挑出来的是什么 818是什么星座 火奥念什么 梦见房子是什么意思
鸡犬不宁是什么生肖 轶是什么意思 白砂糖是什么糖 工作效率等于什么 什么网名好听
中医为什么不让睡凉席jiuxinfghf.com 梦见自己给自己理发是什么意思hcv8jop2ns4r.cn 有什么脑筋急转弯hcv9jop5ns9r.cn 杨梅什么时候上市hcv8jop4ns9r.cn 梦见生小孩是什么征兆hcv9jop6ns9r.cn
母亲节送给妈妈什么礼物hcv8jop5ns3r.cn 病理科是干什么的hcv8jop4ns0r.cn 蝉为什么叫hcv8jop4ns4r.cn 什么的武松hcv8jop1ns7r.cn 安痛定又叫什么名字hcv9jop5ns5r.cn
肠道问题挂什么科hcv7jop4ns5r.cn 韩红什么军衔hcv8jop4ns1r.cn 猎头是干什么的hcv9jop4ns2r.cn 犬瘟是什么原因引起的hcv8jop9ns9r.cn 甲减吃什么hcv8jop7ns5r.cn
静脉血栓是什么症状fenrenren.com 出生证明有什么用hcv9jop0ns3r.cn 眼圈黑是什么原因hcv8jop0ns7r.cn ad吃到什么时候hcv8jop0ns0r.cn 胸腔积液是什么原因造成的hcv8jop3ns4r.cn
百度