【STM32】HAL库:串口通信打印+SHT3x温湿度数据收集


操作系统:Windows 11 (x64)

微控制器:STM32F103C8T6


硬件外设:

  • USB-to-TTL串口(CH340)

【STM32】标准库与HAL库对照学习教程八--串口通信详解__修成真的博客https://xiuchengzhen.blog.csdn.net/article/details/121429721

  • SHT3x温湿度模块

STM32CubeIDE之SHT3X温湿度传感器移植HAL库_小梁子LZ的博客有了前面的OLED的学习,这个学习起来也很快。分以下几步走1.你要有个温度传感器,SHT3X这个型号的,因为我要讲这个2.你要有个STM32开发板(我用的是STM32L431RCT)3.顺便找台电脑下载一个STM32CubeIDE4.简单的找一个SHT3X的驱动,我是去某宝嫖的,一般卖这个的都有,这个驱动分两个文件,是.c和.h的,我直接把这两个放在下边读了我上一篇的人,看这个应该很熟悉吧,一样的套路,学习方法是一样的,你就照搬就行下面是sht3x.c的原文档,里面有个CRC..https://blog.csdn.net/qq_47736089/article/details/124675784

  • 2节1.5V电池串联电源

  • 杜邦线


工程文件:STM32CubeMX

  • 配置 RCC 高速晶振,HCLK 为 72MHz

  • 配置 SYS Debug 为 Serial Wire

  • 使能 I2C1 用于 连接外设SHT3x

  • 使能 USART1 异步 用于 串口通信,中断使能




IDE编辑/编译:Keil uVision5 MDK-ARM V5.32 / ARM Compiler V5

*** 新下载的 Keil uVision 没有 Compiler V5,需要下载ARMCC文件夹并且手动添加路径

图标“三方块”(项目管理) ==> (Folders/Extensions) ==> (Use ARM Complier [...]) ==> Add another

 
安装最新版keil5编译报错*** target ‘target 1‘ uses arm-compiler ‘default compiler version 5‘ which i,keil5.37版_mdk5编译出错_Score A的博客-CSDN博客原因是missingcompilerversion5,缺少V5编译器(compilerversion5),因为打开的工程比较老,是用v5的编译器写的,而现在下的keil5不再预装v5编译器;网上有很多说把Optionsfortarget中的ARMCompiler换成其他的试一下(因为那儿显示的是missingcompilerversion5,是因为。下载了放在ARM文件夹内,然后用上面的步骤添加下载的文件夹,就能用V5的编译器了。然后就是这样子,再点OK就行啦。...https://blog.csdn.net/qq_62078460/article/details/125579899?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168370144816800215031572%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=168370144816800215031572&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~baidu_landing_v2~default-2-125579899-null-null.142%5Ev86%5Econtrol,239%5Ev2%5Einsert_chatgpt&utm_term=keil%20missing%20compiler%20version5&spm=1018.2226.3001.4187


烧录:CMSIS-DAP Debugger (创芯工坊 PWLINK2)


串口收发:

开启接收中断

        Rx_buff 缓存是用来接收PC端发来的数据

	HAL_UART_Receive_IT(&huart1, (uint8_t *)&Rx_buff, 1);

接收中断回调函数

        Rx_String 将接收缓存原样发送回PC

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if(huart == &huart1){Rx_String[Rx_Flag++] = Rx_buff;  if(Rx_String[Rx_Flag-1] == 0x0A) {HAL_UART_Transmit(&huart1, (uint8_t *)&Rx_String, Rx_Flag,0xFFFF); while(HAL_UART_GetState(&huart1) == HAL_UART_STATE_BUSY_TX); memset(Rx_String,0x00,sizeof(Rx_buff)); Rx_Flag = 0; }HAL_UART_Receive_IT(&huart1, (uint8_t *)&Rx_buff, 1);   }
}

串口发送

重定向printf()

        意为重新定义 fputc 和 fgetc 以实现串口打印

int fputc(int ch, FILE *f)
{HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);return ch;
}int fgetc(FILE *f)
{uint8_t ch = 0;HAL_UART_Receive(&huart1, &ch, 1, 0xffff);return ch;
}


温湿度模块SHT3x驱动文件:

包含驱动文件 sht3x.c 和 sht3x.h

        如何添加 .c .h 文件:

        项目工程下(三方块图标)—— 新建Groups(虚线方框)—— 添加外部ch文件 —— OK;

        魔法棒 —— C/C++ —— Include Paths —— 新建Path —— 添加外部ch文件夹 —— OK;

 

 Keil5添加.c文件与.h文件的方法-导入支持库-新大陆物联网竞赛-Lora模块&NBIOT模块例程-添加导入文件_keil如何在c文件中添加h文件_西西菜鸟的博客-CSDN博客本文内容是Keil5的.c文件与.h文件的导入示例,导入所支持的文件库,可以使得我们学习并了解到更多的程序内容。https://blog.csdn.net/qq_39724355/article/details/127537579

        sht3x.c 注意:

                在 sht3x.c 中修改相应单片机型号的头文件;

                0x44代表将 ADDR 针脚接地,如接高电平则应改为0x45;

                以及所启用的I2C口,这里是I2C1,需 Ctrl+F 全局确认变量名是否统一;

#include "sht3x.h"
#include "stm32f1xx.h"       
#include "stm32f1xx_hal.h"	#define    SHT30_ADDR_WRITE    0x44<<1         
#define    SHT30_ADDR_READ    (0x44<<1)+1        
extern I2C_HandleTypeDef hi2c1;

        

        sht3x.h 注意:

                同样,修改包含的头文件名如果不是F1板;

                头文件的最后一行必须是空行(不能有空格),意为 #endif ... 后必须回车;

#ifndef __SHT30_H_
#define __SHT30_H_#include "stm32f1xx.h"                
#include "stm32f1xx_hal.h"	

读取数据

 uint8_t SHT30_Read_Dat(uint8_t* dat);uint8_t SHT30_Dat_To_Float(uint8_t* const dat, float* temperature, float* humidity);

        主要由以上两个函数结合实现,SHT30_Read_Dat 可以粗略理解为通过I2C接收了一串来自
        SHT3x的(16-bit 温度 ST + 16-bit 湿度 SRH)的数据流,将如此 raw data 存入提前声明的
        变量中;SHT30_Dat_To_Float 则是将 raw data 通过以下公式转换成 温度 和 湿度 两个数据
        并分别存入提前声明的变量中。


 主函数代码:

/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "i2c.h"
#include "usart.h"
#include "gpio.h"/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include <stdio.h>
#include "string.h"
#include "sht3x.h"
/* USER CODE END Includes */
/* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV */
uint8_t Rx_String[100];
uint8_t Rx_Flag=0;
uint8_t Rx_buff;
/* USER CODE END PV */
  /* USER CODE BEGIN 2 */SHT30_Reset();SHT30_Init();HAL_UART_Receive_IT(&huart1, (uint8_t *)&Rx_buff, 1);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){uint8_t dat;float temp, humi;SHT30_Read_Dat(&dat);SHT30_Dat_To_Float(&dat,&temp,&humi);printf("Temp:%.1f,Humi:%.1f\n",temp,humi);HAL_Delay(1000);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
/* USER CODE BEGIN 4 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if(huart == &huart1){Rx_String[Rx_Flag++] = Rx_buff;  if(Rx_String[Rx_Flag-1] == 0x0A) {HAL_UART_Transmit(&huart1, (uint8_t *)&Rx_String, Rx_Flag,0xFFFF); while(HAL_UART_GetState(&huart1) == HAL_UART_STATE_BUSY_TX); memset(Rx_String,0x00,sizeof(Rx_buff)); Rx_Flag = 0; }HAL_UART_Receive_IT(&huart1, (uint8_t *)&Rx_buff, 1);   }
}int fputc(int ch, FILE *f)
{HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);return ch;
}int fgetc(FILE *f)
{uint8_t ch = 0;HAL_UART_Receive(&huart1, &ch, 1, 0xffff);return ch;
}/* USER CODE END 4 */

运行结果:


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/3224.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PWA(Progressive web apps):Web技术实现类似原生应用 - 入门

PWA(Progressive web apps)&#xff1a;Web技术实现类似原生应用 - 入门简介 前言 在&#xff08;使用Google浏览器&#xff09;访问一些网站时&#xff0c;有时右上角会弹出“安装应用”的按钮。 例如谷歌V8官网 如果我们点击“安装”&#xff0c;则会在桌面生成一个“快捷方…

通往AGI之路:揭秘英伟达A100、A800、H800、V100在高性能计算与大模型训练中的霸主地位

AGI | NLP | A100 | H100 | Nvidia | Aurora GPT| LLM | A800 | V100 | Intel | ChatGPT 日前&#xff0c;随着深度学习、高性能计算、大模型训练等技术的保驾护航&#xff0c;通用人工智能时代即将到来。各个厂商也都在紧锣密鼓的布局&#xff0c;如英伟达前段时间发布GH 200…

【Pyecharts】| 风电场运维可视化系统 | 文末送书

目录 一. &#x1f981; 摘要二. &#x1f981; 文章结构三. &#x1f981; 所用开发工具与相关技术3.1 PyCharm3.2 Flask3.3 Pyecharts3.4 Jinja2 四. &#x1f981; 设计与实现4.1 系统总体需求4.1.1 数据采集和处理4.1.2 可视化设计4.1.3 后台功能实现 4.2 系统用户模块的实…

document.ai部署教程

原项目链接 1.在code处选择Download ZIP 下载完成之后在合适的位置解压 2.下载Docker for Windows 下载地址 下载完成安装即可 注意&#xff0c;下载完成不要立即打开&#xff0c;不然会卡住 先检查几个设置 ①.打开任务管理器&#xff08;CtrlAltDel&#xff09;&…

wkhtmltox 中文显示一半_中文GPT闲聊对话生成模型 开源工作 包括 GPT和GPT2

bojone/CDial-GPT-tf​github.com 今天发现有一个朋友的github更新了一个新的项目&#xff0c;于是我点进去扫了两眼。首先必然还是把两个预训练语言模型的压缩包下载下来。跟随者这个项目的步伐我发现了一个超级厉害的项目。 thu-coai/CDial-GPT​github.com 在项目介绍中描述…

Docker部署Mysql数据库详解

目录 1. Docker部署Mysql 1.1 Mysql容器 1.1.1 创建Mysql容器 1.1.2 进入Mysql容器并登录Mysql 1.1.3 持久化数据 1.2 远程登录Mysql 1.2.1 修改root加密方式 1.2.2 在容器启动时配置加密方式为mysql_native_password 1.3 Mysql编码 1.3.1 Mysql编码问题 1.3.2 Mysql编码…

ChatGPT扩展系列之ChatHub解决被OpenAI 封号的终极解决方案

ChatGPT扩展系列之ChatHub解决被OpenAI 封号的终极解决方案 本节介绍了一个解决ChatGPT在中国大陆无法使用和担心被封号的问题的方法。近期有很多亚洲用户被封号,原因是有人滥用API接口或者批量注册账号,不符合官方规定。对于这个问题,提出了一个解决方法,可以在中国大陆无…

Docker系列 基于OpenAI API自建ChatGPT

转自我的博客文章https://blognas.hwb0307.com/linux/docker/4201&#xff0c;内容更新仅在个人博客可见。欢迎关注&#xff01; 前言 我用帐号/密码使用chatGPT已经有一段时间。但是&#xff0c;我有几个私交较密的朋友&#xff0c;他们并不具备使用chatGPT的条件&#xff1b…

从开发到上线,三分钟拥有自己的 ChatGPT !

OpenAI 已经公布了 ChatGPT 正式版 API&#xff0c;背后的新模型是 gpt-3.5-turbo&#xff0c;这是 OpenAI 目前最先进的模型&#xff0c;响应速度更快&#xff0c;价格更便宜。 作为开发人员&#xff0c;我们还是希望通过 API 将 ChatGPT 和相关模型集成到自己的产品和应用中&…

基于Tushare量化分析示例

1. 量化神器Tushare介绍 大家都知道量化分析离不开数据支撑&#xff0c;那下面就简单说一下一个简单好用的量化神器——Tushare。 Tushare 提供免费的数据接口&#xff0c;包含沪深股票数据、财务报表数据、指数、基金、期权、期货、港股、美股、宏观经济等数据&#xff0c;甚…

零代码量化投资:用ChatGPT获取新浪财经上的股票实时行情

现在很多免费的股票数据库&#xff0c;比如akshare&#xff0c;其实是从新浪财经或者东方财富网站上爬取下来的。如果能直接从新浪财经或者东方财富网站上爬取数据&#xff0c;可以获取更全面更即时的信息。 可以在ChatGPT中输入提示词如下&#xff1a; 写一段Python代码&…

ChatGPT:搞『量化投资』我是认真的!

量化投资与机器学习微信公众号&#xff0c;是业内垂直于量化投资、对冲基金、Fintech、人工智能、大数据等领域的主流自媒体。公众号拥有来自公募、私募、券商、期货、银行、保险、高校等行业30W关注者&#xff0c;曾荣获AMMA优秀品牌力、优秀洞察力大奖&#xff0c;连续4年被腾…

如何利用ChatGPT学习量化投资?

引言 最近&#xff0c;ChatGPT持续火了很长时间&#xff0c;占领各大热点和头版头条&#xff0c;成为A股开年以来最大的热点之一。ChatGPT是OpenAI开发的一种语言生成模型&#xff0c;可以理解为智能问答机器人。最近围绕量化投资在上面试了很多问题&#xff0c;大部分回答还是…

ChatGPT在社工攻击和反钓鱼中的应用

概述 ChatGPT是一种基于神经网络的自然语言处理模型&#xff0c;可以生成自然流畅的文本或对话。在钓鱼攻击中&#xff0c;攻击者可以使用ChatGPT生成虚假电子邮件或消息&#xff0c;更好地伪装成受害者所信任的个人或组织&#xff0c;从而获取受害者的个人信息。这种行为对个…

看ChatGPT这形势,留给我们开发人员的时间不多了

程序员一直所做的工作是什么&#xff1f;恐怕想到最后&#xff0c;每个努力的程序员都是在让自己努力的走向失业。最近ChatGPT爆火&#xff0c;他能做什么&#xff1f;能写文章&#xff0c;写的很好&#xff0c;可以代替你发邮件&#xff0c;一直到发现OpenAI的深度加持&#x…

ChatGPT其实并不想让开发人员做这5件事情

前言 ChatGPT已经火爆了快半年了吧&#xff0c;紧接着国内也开始推出了各种仿制品&#xff0c;我甚至一度怀疑&#xff0c;如果人家没有推出ChatGPT&#xff0c;这些仿制品会不会出现。而很多人也嗨皮得不行&#xff0c;利用各种方法开始科学上网&#xff0c;用ChatGPT做各种觉…

让ChatGPT连接进互联网世界

大家知道ChatGPT是没有链接到互联网的&#xff0c;所以只能回答2021年之前的知识&#xff0c;对于这么强劲的大脑这有点可惜了&#xff0c;现在有办法了&#xff1a; 使用WebChatGPT插件&#xff08;chrome&#xff09; 安装插件&#xff1a; 上图是安装前 安装后的效果&…

chatGPT打不开问题(个人亲测有效)

chatGPT打不开问题&#xff08;个人亲测有效&#xff09; ChatGPT打不开 Access denied &#xff01;Access denied &#xff01;Access denied &#xff01;相信今天很多国内的小伙伴们打开 Open AI ChatGPT 都会出现&#xff1a;“Access denied You do not have access to …

小狐狸ChatGPT付费创作系统V2.1.0独立版 +WEB端+ H5端 + 小程序端安装教程

播播资源针对ChatGPT付费创作系统V2.1.0提供最新的对应版本小程序端全套测试&#xff0c;上一版本增加了PC端绘画功能&#xff0c;绘画功能采用其他绘画接口-意间AI&#xff0c;本版新增了百度文心一言接口。后台一些小细节的优化及一些小BUG的处理&#xff0c;前端进行了些小细…

ChatGPT 官方 API 来了,价格直接打骨折,未来……

大家好&#xff0c;我是校长。 ChatGPT 自去年年底公布以来&#xff0c;最近这几个月一直处于火热的状态当中&#xff0c;堪称引起了人工智能旋风。 01 官方 API 来了 昨天凌晨 2 点左右&#xff08;美西时间 3 月 1 日&#xff08;周三&#xff09;&#xff09;&#xff0c;Op…