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

STM32CubeIDE(I2C)

目录

一、IIC轮询模式

1.1 配置

 1.2 编写AHT20驱动

1.2.1  aht20.h

1.2.2 aht20.c

二、I2C中断

2.1 打开中断

 2.2 分离读取流程

2.3 在主函数中重新编写读取流程

2.4 在i2c.c中重新定义stm32f1xx_hal_i2c.h中的两个函数

三、I2CDMA

3.1 配置DMA通道

 3.2 代码的修改


一、IIC轮询模式

1.1 配置

 1.2 编写AHT20驱动

根据AHT20手册编写初始化与读数据函数

1.2.1  aht20.h

#ifndef INC_AHT20_H_
#define INC_AHT20_H_#include "i2c.h"void AHT20_Init();
void AHT20_Read(float* Temperature,float* Humidity);#endif /* INC_AHT20_H_ */

1.2.2 aht20.c

#include "aht20.h"#define AHT20_ADDRESS 0x70void AHT20_Init()
{uint8_t readBuffer;HAL_Delay(40);HAL_I2C_Master_Receive(&hi2c1,AHT20_ADDRESS,&readBuffer,1,HAL_MAX_DELAY);if((readBuffer& 0x80)==0x00){uint8_t sendBuffer[3]={0xBE,0x80,0x00};HAL_I2C_Master_Transmit(&hi2c1, AHT20_ADDRESS, sendBuffer, 3, HAL_MAX_DELAY);}
}void AHT20_Read(float* Temperature,float* Humidity)
{uint8_t sendBuffer[3] = {0xAC,0x33,0x00};uint8_t readBuffer[6];HAL_I2C_Master_Transmit(&hi2c1, AHT20_ADDRESS, sendBuffer, 3, HAL_MAX_DELAY);HAL_Delay(75);HAL_I2C_Master_Receive(&hi2c1,AHT20_ADDRESS,readBuffer,6,HAL_MAX_DELAY);if((readBuffer[0] & 0x80)== 0x00){uint32_t date = 0;date=(((uint32_t)readBuffer[3]>>4) + ((uint32_t)readBuffer[2]<<4) + ((uint32_t)readBuffer[1]<<12));*Humidity = date * 100.0f/(1<<20);date=(((uint32_t)readBuffer[3]&0x0F)<<16) + ((uint32_t)readBuffer[4]<<8) + (uint32_t)readBuffer[5];*Temperature = date * 200.0f/(1<<20)-50;}
}

二、I2C中断

2.1 打开中断

 2.2 分离读取流程

分为测量指令 读取指令 解析 三部分

void AHT20_Measure()
{static uint8_t sendBuffer[3] = {0xAC,0x33,0x00};HAL_I2C_Master_Transmit_IT(&hi2c1, AHT20_ADDRESS, sendBuffer, 3);
}void AHT20_Get()
{HAL_I2C_Master_Receive_IT(&hi2c1,AHT20_ADDRESS,readBuffer,6);
}void AHT20_Analysis(float* Temperature,float* Humidity)
{if((readBuffer[0] & 0x80)== 0x00){uint32_t date = 0;date=(((uint32_t)readBuffer[3]>>4) + ((uint32_t)readBuffer[2]<<4) + ((uint32_t)readBuffer[1]<<12));*Humidity = date * 100.0f/(1<<20);date=(((uint32_t)readBuffer[3]&0x0F)<<16) + ((uint32_t)readBuffer[4]<<8) + (uint32_t)readBuffer[5];*Temperature = date * 200.0f/(1<<20)-50;}
}

2.3 在主函数中重新编写读取流程

	  if(aht20State==0){AHT20_Measure();aht20State=1;}else if(aht20State==2){HAL_Delay(75);AHT20_Get();aht20State=3;}else if(aht20State==4){AHT20_Analysis(&temperature, &humidity);sprintf(message,"温度�? %.1f �?, 湿度�?%.1f %%\r\n",temperature,humidity);HAL_UART_Transmit(&huart1, (uint8_t*)message, strlen(message), HAL_MAX_DELAY);HAL_Delay(1000);aht20State=0;}

2.4 在i2c.c中重新定义stm32f1xx_hal_i2c.h中的两个函数

// 发送完成时回调
void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c)
{if(hi2c==&hi2c1){aht20State=2;}
}void HAL_I2C_MasterRxCpltCallback(I2C_HandleTypeDef *hi2c)
{if(hi2c==&hi2c1){aht20State=4;}
}

三、I2CDMA

3.1 配置DMA通道

 3.2 代码的修改

HAL_I2C_Master_Transmit_IT(&hi2c1, AHT20_ADDRESS, sendBuffer, 3);
//修改为
HAL_I2C_Master_Transmit_DMA(&hi2c1, AHT20_ADDRESS, sendBuffer, 3);
HAL_I2C_Master_Receive_IT(&hi2c1,AHT20_ADDRESS,readBuffer,6);
//修改为
HAL_I2C_Master_Receive_DMA(&hi2c1,AHT20_ADDRESS,readBuffer,6);

相关文章:

STM32CubeIDE(I2C)

目录 一、IIC轮询模式 1.1 配置 1.2 编写AHT20驱动 1.2.1 aht20.h 1.2.2 aht20.c 二、I2C中断 2.1 打开中断 2.2 分离读取流程 2.3 在主函数中重新编写读取流程 2.4 在i2c.c中重新定义stm32f1xx_hal_i2c.h中的两个函数 三、I2CDMA 3.1 配置DMA通道 3.2 代码的修改 一…...

http 请求报文响应报文的格式以及Token cookie session 区别

面试必备 http 请求报文响应报文的格式Token cookie session 区别 http 请求报文响应报文的格式 HTTP 请求报文和响应报文的格式如下&#xff1a; HTTP 请求报文格式&#xff1a; <方法> <路径> <协议版本> <请求头部字段1>: <值1> <请求头…...

智能汽车的主动悬架工作原理详述

摘要&#xff1a; 本文将详细介绍主动悬架功能原理设计。 主动悬架是车辆上的一种汽车悬架。它使用车载系统来控制车轮相对于底盘或车身的垂直运动&#xff0c;而不是由大弹簧提供的被动悬架&#xff0c;后者的运动完全由路面决定。主动悬架分为两类&#xff1a;真正的主动悬架…...

vue2和vue3的一些技术点复习

二、vue2 1、vue2对已有组件二次封装&#xff0c;例如fes2 input 组件&#xff08;文档链接&#xff09; 子组件 <template><div class"keyboard-page"><wb-input:id"keyBoardId":placeholder"placeholder" :type"type&q…...

安装nvm 切换node版本

1. 安装 nvm curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.1/install.sh | bash 验证nvm安装完成 command -v nvm 如果安装完成&#xff0c;就会显示如下 nvm 2. 查看 nvm 可以安装的 node 版本 查看可以安装的版本 nvm ls-remote 查看所有可以安装的…...

【html中的BFC是什么】

BFC&#xff08;块级格式化上下文&#xff09;是 CSS 中的一种盒模型布局&#xff0c;是指一个独立的块级容器&#xff0c;容器内部的元素会按照一定规则进行布局。 BFC 具体的规则有以下几个&#xff1a; BFC 内部的元素在垂直方向上相互排列&#xff0c;不会出现浮动的情况。…...

苹果账号被禁用怎么办

转载&#xff1a;苹果账号被禁用怎么办 目录 禁用的原因 解除Apple ID禁用 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UKQ1ILhC-1689932607373)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw)]​编辑 …...

跨境出海企业,如何防范恶意退货欺诈

很多出海企业遭遇到过恶意退货事件。 2021年&#xff0c;某跨境商家在海外电商平台运营超过13年。有一次&#xff0c;有个海外买家买了一台二手的数码摄像机。在买家收到货后&#xff0c;却声称商品备在使用了45分钟之后便自动关机&#xff0c;且不能继续充电。该商家很肯定产…...

数据出境要依法“过安检”!什么是数据出境?

为了规范数据出境活动&#xff0c;保护个人信息权益&#xff0c;维护国家安全和社会公共利益&#xff0c;促进数据跨境安全、自由流动。从2022年9月1日起&#xff0c;《数据出境安全评估办法》施行。什么是数据出境&#xff0c;什么情况下需要进行数据出境安全评估呢&#xff1…...

ARM——点灯实验

循环点灯 RCC寄存器使能GPIOE、GPIOF组寄存器 修改GPIOx组寄存器下的值 通过GPIOx_MODER寄存器设置为输出模式通过GPIOx_OTYOER寄存器设置为推挽输出类型通过GPIOx_OSPEEDR寄存器设置为低速输出通过GPIOx_PUPDR寄存器设置为禁止上下拉电阻点灯 通过GPIOx_ODR寄存器设置为高电…...

Kubernetes 使用 helm 部署 NFS Provisioner

文章目录 1. 介绍2. 预备条件3. 部署 nfs4. 部署 NFS subdir external provisioner4.1 集群配置 containerd 代理4.2 配置代理堡垒机通过 kubeconfig 部署 部署 MinIO添加仓库修改可配置项 访问nodepotingress 1. 介绍 NFS subdir external provisioner 使用现有且已配置的NFS…...

Istio Pilot源码学习(二):ServiceController服务发现

本文基于Istio 1.18.0版本进行源码学习 4、服务发现&#xff1a;ServiceController ServiceController是服务发现的核心模块&#xff0c;主要功能是监听底层平台的服务注册中心&#xff0c;将平台服务模型转换成Istio服务模型并缓存&#xff1b;同时根据服务的变化&#xff0c…...

Spring框架中的ResourcePatternResolver只能指定jar包内文件,指定容器中文件路径报错:FileNotFoundException

原始代码&#xff1a; public static <T> T getFromFile(String specifiedFile, String defaultClasspathFile, Class<T> expectedClass) {try {ResourcePatternResolver resolver new PathMatchingResourcePatternResolver();Resource[] resources resolver.ge…...

pytorch工具——认识pytorch

目录 pytorch的基本元素操作创建一个没有初始化的矩阵创建一个有初始化的矩阵创建一个全0矩阵并可指定数据元素类型为long直接通过数据创建张量通过已有的一个张量创建相同尺寸的新张量利用randn_like方法得到相同尺寸张量&#xff0c;并且采用随机初始化的方法为其赋值采用.si…...

解决Jmeter响应内容显示乱码

一、问题描述 jmeter在执行接口请求后&#xff0c;返回的响应体里面出现乱码现象&#xff0c;尽管在调了对应请求的响应编码也无用&#xff0c;现找到解决办法。 二、解决办法 进入到jmeter的bin目录下&#xff0c;找到jmeter.properties&#xff0c;通过按ctrlF快速定位查找到…...

ChatGPT和搜索引擎哪个更好用

目录 ChatGPT和搜索引擎的概念 ChatGPT和搜索引擎的作用 ChatGPT的作用 搜索引擎的作用 ChatGPT和搜索引擎哪个更好用 总结 ChatGPT和搜索引擎的概念 ChatGPT是一种基于对话的人工智能技术&#xff0c;而搜索引擎则是一种用于在互联网上查找和检索信息的工具。它们各自具…...

Nginx 301 https跳转后出现跨域和混合内容问题 —— 筑梦之路

问题 在浏览器地址栏敲入url访问静态资源目录时&#xff0c;发现默认跳转到了http协议的地址 如上图所示&#xff0c;客户端https请求先到达API网关&#xff0c;然后网关将请求通过http协议转发到静态资源服务器。 调出浏览器发现客户端发送的https请求收到了一个301状态码的响…...

记录--关于前端的音频可视化-Web Audio

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 背景 最近听音乐的时候&#xff0c;看到各种动效&#xff0c;突然好奇这些音频数据是如何获取并展示出来的&#xff0c;于是花了几天功夫去研究相关的内容&#xff0c;这里只是给大家一些代码实例&…...

docker-compose yml配置、常用命令

下载完docker-compose后&#xff0c;如果想使用docker-compose命令开头&#xff0c;需要创建软连接 sudo ln -s /usr/local/lib/docker/cli-plugins/docker-compose /usr/bin/docker-compose 1.docker-compose.yml文件编排 一个 docker-compose.yml 文件的顶层元素有&#xff…...

【实战】 七、Hook,路由,与 URL 状态管理(下) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(十三)

文章目录 一、项目起航&#xff1a;项目初始化与配置二、React 与 Hook 应用&#xff1a;实现项目列表三、TS 应用&#xff1a;JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理七、Hook&…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

Python 高效图像帧提取与视频编码:实战指南

Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...

【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权

摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题&#xff1a;安全。文章将详细阐述认证&#xff08;Authentication) 与授权&#xff08;Authorization的核心概念&#xff0c;对比传统 Session-Cookie 与现代 JWT&#xff08;JS…...