63、ARM/STM32中IIC相关学习20240417
完成温湿度传感器数据采集实验。
【思路:1.通过IIC通信原理,理解其通信过程,通过调用封装的IIC函数达成主机和从机之间:起始信号、终止信号、读、写数据的操作; 2.了解温湿度传感器控制芯片SI7006的工作原理,通过对其寄存器的相应操作,完成SI7006的初始化、启动温度测量并读取数值、启动湿度测量并读取数值】
【本次实验效果:当读取到的测量温度大于等于28°时,启动电风扇,小于则关闭风扇;当读取到的测量湿度大于等于60时,启动震动马达,小于则关闭】
代码如下<不含icc.c/.h>:
头文件si7006.h:
// 先写防止头文件的重复包含的机制 #ifndef __SI7006_H__
#define __SI7006_H__#include"iic.h"
void delay_ms(int ms);
void si7006_init();
unsigned short si7006_read_hum();
short si7006_read_tem();
extern void printf(const char *fmt, ...);
void Motor_init();
void FAN1_init();
#endif
封装函数:si7006.c:
#include "si7006.h"//封装延时函数
void delay_ms(int ms)
{int i,j;for(i=0;i<ms;i++){for(j=0;j<2000;j++){}}
}//温湿度传感器初始化
void si7006_init()
{//1.发起起始信号i2c_start();//2.发送7bit从机地址和写标志位 0X80i2c_write_byte(0x80);//3.等待从机应答if(i2c_wait_ack()){printf("no ack\n");}//4.发送寄存器地址 0XE6i2c_write_byte(0xe6);//5.等待从机应答if(i2c_wait_ack()){printf("no ack\n");}//6.向从机发送数据 0X3Ai2c_write_byte(0x3a);//7.等待从机应答if(i2c_wait_ack()){printf("no ack\n");}//8.发送终止信号i2c_stop();
}unsigned short si7006_read_hum()
{unsigned char hum_l,hum_h;unsigned short hum;// 1.主机发起起始信号i2c_start();// 2.主机发送7bit从机地址+1bit写标志i2c_write_byte(0x80);// 3.等待从机应答if(i2c_wait_ack()){printf("no ack\n");}// 4.主机发送8bit寄存器地址i2c_write_byte(0xe5); // 5.等待从机应答if(i2c_wait_ack()){printf("no ack\n");} // 6.主机发起重复起始信号i2c_start();// 7.主机发送7bit从机地址+1bit 读 0X81i2c_write_byte(0x81); // 8.等待从机应答if(i2c_wait_ack()){printf("no ack\n");} // 9.延时等待从机测量数据delay_ms(100);// 10.读取湿度的高8bit数据 hum_hhum_h = i2c_read_byte(0);hum_l = i2c_read_byte(1);// 11.发送应答信号// 12.读取湿度的低8位数据 hum_l// 13.发送非应答信号// 14.发起终止信号i2c_stop();// 15.将读取到的数据的低8位和高8bit合成一个完整的数据hum=hum_h<<8|hum_l ;return hum;}short si7006_read_tem()
{char tem_l,tem_h;short tem;// 1.主机发起起始信号i2c_start();// 2.主机发送7bit从机地址+1bit写标志i2c_write_byte(0x80);// 3.等待从机应答if(i2c_wait_ack()){printf("no ack\n");}// 4.主机发送8bit寄存器地址i2c_write_byte(0xe3); // 5.等待从机应答if(i2c_wait_ack()){printf("no ack\n");} // 6.主机发起重复起始信号i2c_start();// 7.主机发送7bit从机地址+1bit 读 0X81i2c_write_byte(0x81); // 8.等待从机应答if(i2c_wait_ack()){printf("no ack\n");} // 9.延时等待从机测量数据delay_ms(100);// 10.读取温度的高8bit数据 tem_htem_h = i2c_read_byte(0);tem_l = i2c_read_byte(1);// 11.发送应答信号// 12.读取温度的低8位数据 tem_l// 13.发送非应答信号// 14.发起终止信号i2c_stop();// 15.将读取到的数据的低8位和高8bit合成一个完整的数据tem=tem_h<<8|tem_l;return tem;
}//马达初始化 TIM16 /GPIOF6
void Motor_init()
{//iic.c中已经使能GPIOF时钟//使能TIM16 时钟RCC->MP_APB2ENSETR |= (0X1<<3);// 设置PF6引脚为通用的输出功能GPIOF->MODER &= (~(0x3 << 12));GPIOF->MODER |= (0x1 << 12);//初始化设置为低电平(关闭状态)GPIOF->ODR &= (~(0X1<<6));
}//风扇初始化 TIM1 / GPIOE9
void FAN1_init()
{//使能TIM1时钟RCC->MP_APB2ENSETR |= (0X1);//使能GPIOE时钟RCC->MP_AHB4ENSETR |= (0x1 << 4);// 设置PE9引脚为通用的输出功能GPIOE->MODER &= (~(0x3 << 18));GPIOE->MODER |= (0x1 << 18);//默认关闭状态GPIOE->ODR &= (~(0X1<<9));
}
主程序main.c:
#include "si7006.h"int main(){//si7006初始化si7006_init();i2c_init();Motor_init();FAN1_init();unsigned short hum;short tem;while (1){hum = si7006_read_hum();tem = si7006_read_tem();hum = hum*125/65536 -6;tem=tem*175.72/65536-46.85;printf("hum:%d\n",hum);printf("tem:%d\n",tem);if(tem >= 28){//如果温度超出30 打开风扇GPIOE->ODR |= (0X1<<9);}else{//关闭风扇GPIOE->ODR &= (~(0X1<<9));}if(hum>=60 ){//如果湿度大于60打开震动马达GPIOF->ODR |= (0X1<<6);}else{//关闭震动马达GPIOF->ODR &= (~(0X1<<6));} delay_ms(1000);}return 0;}
相关文章:
63、ARM/STM32中IIC相关学习20240417
完成温湿度传感器数据采集实验。 【思路:1.通过IIC通信原理,理解其通信过程,通过调用封装的IIC函数达成主机和从机之间:起始信号、终止信号、读、写数据的操作; 2.了解温湿度传感器控制芯片SI7006的工作原理&#…...
离岸人民币与人民币国际化
参考 什么是离岸人民币?它有什么用? - 知乎 “人民币就是人民币,为什么要在它前面加上离岸二字?” “既然有离岸人民币,是否有在岸人民币?” 今天我们就简单了解一下什么是离岸人民币。 离岸/在岸人民币…...
Linux平台上部署和运行Ollama的全面指南
Ollama的安装与配置 Ollama提供了一种简单的安装方法,只需一行命令即可完成安装,但是对于想要更深入了解和自定义安装的用户,我们也提供了手动安装的步骤。 快速安装 Ollama的安装极为简单,只需在终端中执行以下命令࿱…...
Web---robots协议详解
在Web中,robots协议(也称为robots.txt)是一种文本文件,用于向搜索引擎机器人(通常称为爬虫)提供指导,以指示它们哪些页面可以抓取,哪些页面应该忽略。robots.txt文件位于网站的根目录…...
华为海思校园招聘-芯片-数字 IC 方向 题目分享——第四套
华为海思校园招聘-芯片-数字 IC 方向 题目分享——第四套 (共9套,有答案和解析,答案非官方,仅供参考)(共九套,每套四十个选择题) 部分题目分享,完整版获取(WX:didadida…...
clipper一些数据结构(入门初识(一))
clipper一些数据结构(一) Clipper库是一个用于执行多边形裁剪(clipping)和偏移(offsetting)操作的开源C库。在Clipper库中,点和多边形(polygon)是基本的数据结构。Clipp…...
读《SQL基础教程 第二版 上》的一些总结
1. 数据库语言 DDL: Data Definition Language,数据定义语言(库、表的操作) DML: Data Manipulation Language, 数据操控语言(对表中数据的增删改) DQL: Data Query Language,数据库查询语言…...
EDI是什么:EDI系统功能介绍
EDI全称Electronic Data Interchange,中文名称是电子数据交换,也被称为“无纸化贸易”。EDI实现企业间(B2B)自动化通信,帮助贸易伙伴和组织完成更多的工作、加快物流时间并消除人为错误。 目前国内企业实现EDI通信大多…...
64B/66B GT Transceiver 配置
一、前言 前一篇文章已经讲述了64B/66B的编码原理,此篇文章来配置一下7系列GT的64B/66B编码。并讲述所对应的例子工程的架构,以及部分代码的含义。 二、IP核配置 1、打开7 Series FPGAs Transceiver Wizards,选择将共享逻辑放置在example …...
ES6: promise对象与回调地狱
ES6: promise对象与回调地狱 一、回调地狱二、Promise概述三、Promise的组成四、用函数封装Promise读取文件操作 一、回调地狱 在js中大量使用回调函数进行异步操作,而异步操作什么时候返回结果是不可控的,所以希望一段程序按我们制定的顺序执…...
Qt事件处理机制2-事件函数的传播
所有继承自QObject的类都有event函数,该函数用来处理自身的事件,函数定义如下: virtual bool QObject::event(QEvent *e);Qt帮助文档: This virtual function receives events to an object and should return true i…...
【PDF.js】PDF文件预览
【PDF.js】PDF文件预览 一、PDF.js二、PDF.js 下载1、下载PDF.js2、在项目中引入3、屏蔽跨域错误 三、项目中使用四、说明五、实现效果 使用PDFJS实现pdf文件的预览,支持预览指定页、关键词搜索、缩略图、页面尺寸调整等等。 一、PDF.js 官方地址 文档地址 二、PD…...
从建表语句带你学习doris_表索引
1、doris建表概述 1.1、doris建表模板 CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [DATABASE.]table_name (column_definition1[,column_deinition2,......][,index_definition1,[,index_definition2,]] ) [ENGINE [olap|mysql|broker|hive]] [key_desc] [COMMENT "tabl…...
Linux CentOS 安装 MySQL 服务教程
Linux CentOS 安装 MySQL 服务教程 1. 查看系统和GNU C库(glibc)版本信息 1.1 查询机器 glibc 版本信息 glibc,全名GNU C Library,是大多数Linux发行版中使用的C库,为系统和应用程序提供核心的API接口。在Linux系统中,特别是在…...
MSSQL 命令行操作说明 sql server 2022 命令行下进行配置管理
说明:本文的内容是因为我在导入Access2019的 *.accdb 格式的数据时,总是出错的背景下,不得已搜索和整理了一下,如何用命令行进行sql server 数据库和用户管理的方法,作为从Access2019 直接导出数据到sql server 数据库…...
【系统分析师】系统安全分析与设计
文章目录 1、安全基础技术1.1 密码相关1.1.1对称加密1.1.2非对称加密1.1.3信息摘要1.1.4数字签名1.1.5数字信封 1.2 PKI公钥体系 2、信息系统安全2.1 保障层次2.2 网络安全2.2.1WIFI2.2.2 网络威胁与攻击2.2.3 安全保护等级 2.3计算机病毒与木马2.4安全防范体系 1、安全基础技术…...
ActiveMQ 07 集群配置
Active MQ 07 集群配置 官方文档 http://activemq.apache.org/clustering 主备集群 http://activemq.apache.org/masterslave.html Master Slave TypeRequirementsProsConsShared File System Master SlaveA shared file system such as a SANRun as many slaves as requ…...
Redis(哨兵模式)
什么是哨兵机制 问题: redis 主从复制模式下, 一旦主节点由于故障不能提供服务, 需要人工进行主从切换, 同时大量客户端需要被通知切换到新的主节点上, 对于有一定规模的应用来说, 对于人力的资源消耗会很大.解决: 通过哨兵对主从结构进行监控, 一旦出现主节点挂了的情况, 自动…...
一种基于镜像指示位办法的RingBuffer实现,解决Mirror和2的幂个数限制
简介 在嵌入式开发中,经常有需要用到RingBuffer的概念,在RingBuffer中经常遇到一个Buffer满和Buffer空的判断的问题,一般的做法是留一个单位的buffer不用,这样做最省事,但是当RingBuffer单位是一个结构体时࿰…...
【Java开发指南 | 第十一篇】Java运算符
读者可订阅专栏:Java开发指南 |【CSDN秋说】 文章目录 算术运算符关系运算符位运算符逻辑运算符赋值运算符条件运算符(?:)instanceof 运算符Java运算符优先级 Java运算符包括:算术运算符、关系运算符、位运算符、逻辑运算符、赋值…...
Lumerical圆锥建模避坑指南:从参数计算到3D旋转生成的完整流程
Lumerical圆锥建模避坑指南:从参数计算到3D旋转生成的完整流程 在光学仿真领域,精确的几何建模往往是获得可靠结果的第一步。对于圆锥结构这种在光子晶体、超表面和纳米天线设计中广泛应用的形状,其建模过程看似简单却暗藏玄机。许多研究人员…...
实战UNet++:基于segmentation_models_pytorch的医学图像分割全流程解析
1. 医学图像分割与UNet的核心价值 医学图像分割是计算机视觉在医疗领域最重要的应用之一。与自然图像不同,CT、MRI等医学影像具有灰度范围窄、组织边界模糊、噪声干扰大等特点。传统方法需要医生手动勾画病灶区域,一张高清CT可能需要数小时,而…...
矩阵按键的硬件设计与软件扫描实战
1. 矩阵按键的硬件设计要点 第一次接触矩阵按键时,我完全被它节省IO口的设计惊艳到了。想象一下,16个独立按键原本需要16个IO口,而4x4矩阵按键只需要8个IO口就能搞定。这种设计在资源受限的单片机项目中简直就是救命稻草。 硬件连接上有个容易…...
Wan2.1-umt5辅助数学公式处理:从图片或LaTeX中理解与转换数学表达式
Wan2.1-umt5辅助数学公式处理:从图片或LaTeX中理解与转换数学表达式 如果你在科研、教育或者出版行业工作过,一定遇到过这样的烦恼:看到一篇论文里的复杂公式,想把它录入到自己的文档里,只能一个字一个字地对着敲&…...
手柄优化指南:DS4Windows摇杆调校与硬件适配完全手册
手柄优化指南:DS4Windows摇杆调校与硬件适配完全手册 【免费下载链接】DS4Windows Like those other ds4tools, but sexier 项目地址: https://gitcode.com/gh_mirrors/ds/DS4Windows 在游戏体验中,手柄摇杆的精准控制直接影响操作手感与游戏表现…...
S2-Pro提示词(Prompt)工程入门:从零到一掌握高效对话技巧
S2-Pro提示词(Prompt)工程入门:从零到一掌握高效对话技巧 1. 为什么需要学习提示词工程 你可能已经发现,同样的AI模型,在不同人手里表现天差地别。有人能让它写出专业报告,有人却只能得到敷衍的回复。这中…...
FireRedASR Pro模型架构浅析:从卷积神经网络到端到端设计
FireRedASR Pro模型架构浅析:从卷积神经网络到端到端设计 最近在语音识别圈子里,FireRedASR Pro这个名字被提到的次数越来越多了。不少朋友都在问,这个模型到底有什么特别之处,为什么大家都在讨论它。其实,它的核心魅…...
HunyuanVideo-Foley部署案例:混合精度(FP16/AMP)推理性能实测报告
HunyuanVideo-Foley部署案例:混合精度(FP16/AMP)推理性能实测报告 1. 测试环境与配置 1.1 硬件配置 显卡:RTX 4090D 24GB显存(驱动550.90.07)CPU:10核心处理器内存:120GB DDR4存储…...
Realistic Vision V5.1 虚拟摄影棚实战:利用GitHub管理自定义模型与脚本
Realistic Vision V5.1 虚拟摄影棚实战:利用GitHub管理自定义模型与脚本 你是不是也遇到过这样的烦恼?好不容易在本地电脑上,用Realistic Vision V5.1模型调出了一套完美的参数组合,生成的人像照片质感堪比专业影棚。结果换台电脑…...
颠覆式窗口置顶:Topit重新定义Mac多任务处理体验
颠覆式窗口置顶:Topit重新定义Mac多任务处理体验 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit 在数字工作空间爆炸式增长的今天,Mac用…...
