首页 > 其他分享 >HAL库-第五章-BH1750光强传感器模块、MPU6050陀螺仪、Dht11温湿度模块使用

HAL库-第五章-BH1750光强传感器模块、MPU6050陀螺仪、Dht11温湿度模块使用

时间:2025-01-14 15:30:28浏览次数:3  
标签:BH1750 HAL 温湿度 Init CODE USER 模块 GPIO USART1

目录

一、实验目的

二、实验原理

代码1-usart模块化代码

serial_port.c

 serial_port.h

三、实验步骤,代码与结果

1.添加USART串口

(1)在项目文件中添加serial_port.c以及serial_port.h,位置分别为Core_Src以及Core_Inc。

(2)在keil中添加.c代码

(3)在Drivers/CMSIS下修改stm32f1xx_hal_conf.h文件,开启usart

(4)在Drivers/stm32f1xx_HAL_Driver中添加usart以及uart驱动文件

(5)在main函数中添加新的头文件

2.实验1,bh1750代码理解

3.实验2:MPU6050代码理解

4.实验3:Dht11温湿度代码理解

5.实验结果

(1)实验1,bh1750

 (2)实验2:MPU6050

(3)实验3:Dht11温湿度代码理解

四、心得体会与总结


一、实验目的

        本次实验涉及传感器:BH1750光强传感器模块、MPU6050陀螺仪、Dht11温湿度模块。学习如何获取传感器的数据,并转化对应的数据,并做出对应的反应。学习如何调用已经写成模块的代码。

二、实验原理

        利用 STM32F103ZET6 开发板与 STM32CubeMX 开放平台和BH1750光强传感器模块、MPU6050陀螺仪、Dht11温湿度模块进行嵌入式系统开发。

代码1-usart模块化代码

serial_port.c

#include "serial_port.h"

/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

UART_HandleTypeDef huart1;

/* USART1 init function */

void MX_USART1_UART_Init(void)
{

  /* USER CODE BEGIN USART1_Init 0 */

  /* USER CODE END USART1_Init 0 */

  /* USER CODE BEGIN USART1_Init 1 */

  /* USER CODE END USART1_Init 1 */
  huart1.Instance = USART1;
  huart1.Init.BaudRate = 115200;
  huart1.Init.WordLength = UART_WORDLENGTH_8B;
  huart1.Init.StopBits = UART_STOPBITS_1;
  huart1.Init.Parity = UART_PARITY_NONE;
  huart1.Init.Mode = UART_MODE_TX_RX;
  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  if (HAL_UART_Init(&huart1) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN USART1_Init 2 */

  /* USER CODE END USART1_Init 2 */

}

void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};
  if(uartHandle->Instance==USART1)
  {
  /* USER CODE BEGIN USART1_MspInit 0 */

  /* USER CODE END USART1_MspInit 0 */
    /* USART1 clock enable */
    __HAL_RCC_USART1_CLK_ENABLE();

    __HAL_RCC_GPIOA_CLK_ENABLE();
    /**USART1 GPIO Configuration
    PA9     ------> USART1_TX
    PA10     ------> USART1_RX
    */
    GPIO_InitStruct.Pin = GPIO_PIN_9;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_10;
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    /* USART1 interrupt Init */
    HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(USART1_IRQn);
  /* USER CODE BEGIN USART1_MspInit 1 */

  /* USER CODE END USART1_MspInit 1 */
  }
}

void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
{

  if(uartHandle->Instance==USART1)
  {
  /* USER CODE BEGIN USART1_MspDeInit 0 */

  /* USER CODE END USART1_MspDeInit 0 */
    /* Peripheral clock disable */
    __HAL_RCC_USART1_CLK_DISABLE();

    /**USART1 GPIO Configuration
    PA9     ------> USART1_TX
    PA10     ------> USART1_RX
    */
    HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10);

    /* USART1 interrupt Deinit */
    HAL_NVIC_DisableIRQ(USART1_IRQn);
  /* USER CODE BEGIN USART1_MspDeInit 1 */

  /* USER CODE END USART1_MspDeInit 1 */
  }
}

/* USER CODE BEGIN 1 */

/* USER CODE END 1 */
void serial_init(void){
MX_USART1_UART_Init();
}

 serial_port.h

#ifndef __serial_port_H__
#define __serial_port_H__

#ifdef __cplusplus
extern "C" {
#endif

/* Includes ------------------------------------------------------------------*/
#include "main.h"

/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

extern UART_HandleTypeDef huart1;

/* USER CODE BEGIN Private defines */

/* USER CODE END Private defines */

void MX_USART1_UART_Init(void);
void serial_init(void);
/* USER CODE BEGIN Prototypes */

/* USER CODE END Prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __USART_H__ */

三、实验步骤,代码与结果

1.添加USART串口

(1)在项目文件中添加serial_port.c以及serial_port.h,位置分别为Core_Src以及Core_Inc。

                                        图1 放置serial_port.c和serial_port.h

(2)在keil中添加.c代码

                                                图2 在keil中添加.c代码        

(3)在Drivers/CMSIS下修改stm32f1xx_hal_conf.h文件,开启usart

                                                图3 修改stm32f1xx_hal_conf.h文件 

(4)在Drivers/stm32f1xx_HAL_Driver中添加usart以及uart驱动文件

                                                        图4 添加驱动文件

                                                        图5 驱动文件所在位置

(5)在main函数中添加新的头文件

                                                        图6 添加头文件        

2.实验1,bh1750代码理解

                                        图7 主设备(Master)模式下的数据接收

                                                                图8 代码分析

3.实验2:MPU6050代码理解

                                                                图9 代码分析

4.实验3:Dht11温湿度代码理解

dht11模块规格手册:下面的图片与代码图片中的代码按顺序一一对应

配置好引脚模式后,开始建立连接

                                                        图10  dht11模块规格手册

dht11数据发送代码实现的原理:

                                                图11  dht11数据发送代码

5.实验结果

(1)实验1,bh1750

                                                        图12 oled显示光强

                                                图13 电脑串口获取的光强数据

 (2)实验2:MPU6050

        图14 lcd显示mpu6050获取转化后的数据

                                        图15 上位机程序获取mpu6050数据并联动

        如果要把bh1750传感器加入并进行显示在屏幕上,硬件该如何连接?在mpu6050软件基础上实现要做哪些修改?

                                                        图16  bh1750引脚图

硬件连接:根据上图和软件配置的scl和sda所对应的引脚进行连接

在mpu6050软件基础上实现要做哪些修改:因为mpu6050软件是基于标准库的,所以我们需要在网上找到bh1750驱动的.h和.c文件,然后加入到项目工程中,并且设置bh1750的i2c对应的引脚。然后将bh1750读取转化的数据的数据在下图所示的代码中进行赋值并且在液晶屏中显示。

                                                        图17  软件修改位置

(3)实验3:Dht11温湿度代码理解

                                图18  lcd温湿度显示

四、心得体会与总结

        通过本次实验,我深入学习了如何移植代码块和基于标准库和基于HAL库的代码如何相互融合移植,认识了BH1750光强传感器模块、MPU6050陀螺仪、Dht11温湿度模块,学习了通过模块的数据手册去分析它们是如何接收和发送消息的,通过模块的规则去配置对应的代码,收获颇丰。

标签:BH1750,HAL,温湿度,Init,CODE,USER,模块,GPIO,USART1
From: https://blog.csdn.net/weixin_73690807/article/details/145137246

相关文章

  • 医学图像分析工具08:BrainSuite || 用 BrainSuite 处理 MRI 数据的完整流程 模块化、图
    BrainSuite:强大的神经影像分析工具BrainSuite是另一个广受神经科学研究人员喜爱的神经影像学分析工具。与FreeSurfer类似,BrainSuite的设计目标是通过高效的算法和简洁的界面帮助用户处理和分析MRI数据,但它更注重提供模块化、直观的操作体验。接下来,我们将详细探讨Br......
  • 了解Webpack:现代前端开发的静态模块打包器
            在现代前端开发中,Webpack已成为不可或缺的工具之一。作为一个静态模块打包器(modulebundler),Webpack通过分析和处理项目中的资源依赖关系,将它们打包成一个或多个bundle(捆绑包),这些bundle可以在浏览器中加载和执行。本文将详细介绍Webpack的概念、核心功能、安装......
  • (即插即用模块-Attention部分) 四十一、(2023) MLCA 混合局部通道注意力
    文章目录1、MixedLocalChannelAttention2、代码实现paper:MixedlocalchannelattentionforobjectdetectionCode:https://github.com/wandahangFY/MLCA1、MixedLocalChannelAttention现有通道注意力机制的局限性:大多数通道注意力机制只关注通道特征信......
  • SAP系统PP生产计划模块业务调研总结报告框架
    文章目录前言业务调研总结报告前言进行业务调研要做到全面、细致、深入,把握业务背景、痛点和需求,才能为后续的专题讨论、蓝图设计及系统实施、测试打下良好的基础。以下为SAP项目PP模块的业务调研总结报告框架示意,供参考。业务调研总结报告一、文档目的二、关......
  • 转:python的zmq模块
    转自:https://www.jianshu.com/p/04660f746a16https://blog.csdn.net/SweetHeartHuaZai/article/details/1269348191、zmq介绍:创建和销毁套接字:zmq.socket(),zmq.close()配置和读取套接字:zmq.setsockopt(),zmq.getsockopt()为套接字建立连接:zmq.bind(),zmq.connect()发送......
  • WiFi+4G摄像头拍照图传模块(夜视2K高清1080P)-关于参考资料,程序移植,新建调用自己的
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/product/audioCamera.html"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p> 关于参考资料......
  • RT-DETR融合[AAAI2025]的ConSeg中的CDFAPreprocess模块
    RT-DETR使用教程: RT-DETR使用教程RT-DETR改进汇总贴:RT-DETR更新汇总贴《ConDSeg:AGeneralMedicalImageSegmentationFrameworkviaContrast-DrivenFeatureEnhancement》一、模块介绍    论文链接:https://arxiv.org/abs/2412.08345    代......
  • 【深度学习】CAB:通道注意力模块
    @[toc]CAB:通道注意力模块CAB:通道注意力模块CAB(ChannelAttentionBlock)是一种通道注意力模块,通常用于计算机视觉任务中,特别是在图像恢复、超分辨率、去噪等任务中。它的核心思想是通过学习通道之间的依赖关系,自适应地调整每个通道的特征响应,从而增强模型对重要特征的提......
  • enum模块(枚举类型)
    enum模块:pythonenum模块提供了枚举功能。有些编程语言是内置了枚举类型,但python没有内置,只是用enum模块里的Enum类来实现类似功能。如果不使用枚举,我们一般会采用定义常量的方式来处理。比如下面代码:RED,GREEN,YELLOW=range(3)下面演示了一个常见的enum类的创建:fromenu......
  • 手戳usb转串口芯片cp2102模块——理论知识
    一、简介 CP2102是一个USB转串行通信接口的芯片,常用于将USB接口转换为常见的串口接口(RS-232、TTL等)。它通常用于嵌入式系统、数据传输以及外设控制等领域。以下内容基于电脑通过cp2102与esp32进行串口通信(比如烧录程序、数据发送与接受)的情景讲述。二、讲述以上......