STM32CubeMX学习教程之硬件I2C读取光照度

2023-10-19 12:59

本文主要是介绍STM32CubeMX学习教程之硬件I2C读取光照度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

使用STM32 HAL库读写环境光照度传感器(BH1750)

本文将教大家如何快速使用STM32HAL库读取光照度数据。

实现功能:通过App实时监测光照度数据。

程序下载路径:demo程序。

一.使用STM32CubeMX创建一个新工程

1.如下图创建一个新工程:

image-20210828120739333

2.如下图选择自己现有的STM32开发板进行开发:

image-20210828115324329

3.配置时钟源

如果选择使用外部高速时钟(HSE),则需要在System Core中配置RCC;

如果使用默认内部时钟(HSI),这一步可以略过;

下面工程我使用的是内部时钟,因此这一步是不需要的。

image-20210828114418492

4.配置串口

NUCLEO-L476RG板载ST-Link并且虚拟了一个串口,原理图如下:

image-20210828115452591

使PC的串口与USART2之间连接。(打印日志口,同时也作为程序下载口)

接下来开始如下图配置USART2:

image-20210828115626599

使用串口1和涂鸦模组WB3S通信(单片机和WB3S串口通信,采用透传的模式),串口1配置如下图所示:

image-20210828115749857

image-20210828120005508

5.配置IIC口

为了采集光照度数据(BH1750),单片机采用I2C协议和光照度模块进行通信,采用I2C1,配置如下图所示:

image-20210831142209738

6.配置时钟树

STM32L4的最高主频到80M,所以配置PLL,最后使HCLK=80Mhz即可:

image-20210826180846723

7.生产工程设置

image-20210831142511954

8.代码生成设置

最后设置生成独立的初始化文件:

image-20210826161522477

9.生成代码

点击GENERATE CODE即可生成MDK-V5工程如下:

image-20210826162035145

10.用KEIL5打开生成的代码,然后开始添加自己要实现的功能函数。

二.BH1750驱动程序设计

1.硬件设计

BH1750 照度检测模块搭载一个BH1750FVI,BH1750FVI是两线式串行总线接口(IIC)的16位数字输出型环境光强度传感器,利用它的高分辨率可以探测较大范围内的光照强度变化(1lx - 65535lx)。

  • BH1750的实物图如下:

image-20210831150108972

  • BH1750的原理图如下:

image-20210831145811207

管脚介绍

名称VCCGNDSCLSDAADDR
功能描述3~5V供电参考地IIC时钟线IIC数据线地址线

2.软件设计

参考BH1750FVI数据手册进行编程。

  • BH1750的器件地址由ADDR端口的高低电平决定。

image-20210831151712403

  • 驱动程序底层使用 HAL 库的 IIC 初始化文件,包含如下头文件:

image-20210831151922533

  • 发送命令的函数如下:

image-20210831152009275

  • 接收光照强度数据的函数如下:

image-20210831152106961

  • 根据数据手册中给出的公式,编写将从BH1750读出的两个字节数据转换为对应强度值的函数(数据转换函数):

image-20210831152358497

驱动程序设计完成之后就可以开始进行联网功能的设计了。

三.平台产品创建

  进入涂鸦智能IoT平台点击“创建产品”。这里不用纠结产品品类的选择,重点是为了拿到MCU-SDK文件,实际使用时可以根据具体的产品修改sdk内部的pid即可适配自己的产品。

例如:点击创建产品,选择标准类目>电工>开关。(当时为了测试用,所以选择一个标准类目,也可以在平台上选择其它品类去创建也是可以的)

image-20210823115534415

  • 选择自定义方案,输入产品名称,选择通讯协议为WIFI+蓝牙,点击创建产品

  • 根据要实现的设备功能,创建好DP功能点。

    image-20210831142658185

  • 创建好DP点之后,点击设备面板,选择自由配置面板,方便开发调试,也可以选择其它的面板。

    image-20210828102747617

    image-20210831142749179

面板创建好之后,点击硬件开发,对接方式选择“涂鸦标准模组MCU SDK开发”,模组选择WB3S Wi-Fi&Bluetooth模组(在实际开发过程中可选择手上已有的涂鸦模组即可),固件选择通用固件。

image-20210827104014520

image-20210831143049655

四.MCU SDK移植

平台产品创建完之后,我们会获取到一个MCU SDK包,之后就可以快速移植到MCU了。

  • 在解压后的文件夹中找到mcu_sdk相关源文件和头文件,全部拷贝到我们创建好的工程模板里的MCU_SDK文件夹里;打开上面创建好的工程,将mcu_sdk的源文件添加进对应组里,同时添加include paths:

image-20210531160912620

  • 点击编译,会崩出几个error,接下来就需要按照出error的地方注释提示一步步修改代码。

image-20210531162650067

  • uart_receive_input()为串口接收数据处理接口,只需将它放进串口中断即可,这里我们以串口1作为与模组通讯串口,调试中把串口2作为日志口,首先在main函数中添加串口1和串口2初始化代码,并使能接收中断(接收使能中断已在串口初始化函数中体现):

20210907171737319

image-20210828124608303

  • 然后在stm32l4xx_it.c文件中添加中断处理函数,然后包含 mcu_api.h文件并将uart_receive_input()接口添加进去,添加完成后,删除error注释即可:

    image-20210828104429211

image-20210531162737760

  • 再来看下一个errror,由于我们上一步已经通过中断接收的形式实现了串口数据接收处理了,这个多字节处理我们可以不用,直接把error注释删除即可。

image-20210531162850680

  • 下一个errror:

image-20210531163026617

  • 按照提示将该接口放在main函数的while循环内即可,别忘了在 main.c 中包含 wifi.h 头文件。

image-20210831143209965

  • 再来看下一个error:

image-20210531163323771

  • 同样的,按照提示将该函数放到main函数开头部分即可。

image-20210831143300925

  • 然后是串口发送相关:

image-20210531163756239

  • 这里只需实现串口1的数据发送函数然后放进去即可。使用STM32 HAL库里面的串口单字节发送函数,以阻塞方式发送数据量,添加代码如下:

image-20210828105450016

image-20210828105352813

  • 然后是DP数据点上报相关的:

这里我们可以直接注释掉error提示,在实际开发过程中再实现该功能即可。

image-20210828105606863

  • 以下在主函数里面,添加光照度上报的数据。这里可以改成自己想要上报传感器的数据。

image-20210901155930522

  • 最后是产测相关的:

image-20210531165514528

一般开发者不涉及生产测试的话直接删除注释不用管就行。

下图这个红色标出的函数是进行配网的,通过NUCLEO-L476开发板上的用户按键进行配网连接。

image-20210831143448232

修改完上述几处地方后,再次编译,显示error全部消除,至此涂鸦MCU SDK就已移植完毕,后续可使用涂鸦模组调试助手进行测试。涂鸦模组调试助手的使用方法可参考调试助手文档。

五.实验样机测试展示

image-20210831145405075

通过之前配置好的面板,通过涂鸦智能APP进行配网实时采集光照度传感器的数据。

image-20210831143630604

这篇关于STM32CubeMX学习教程之硬件I2C读取光照度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/239948

相关文章

电脑没有仿宋GB2312字体怎么办? 仿宋GB2312字体下载安装及调出来的教程

《电脑没有仿宋GB2312字体怎么办?仿宋GB2312字体下载安装及调出来的教程》仿宋字体gb2312作为一种经典且常用的字体,广泛应用于各种场合,如何在计算机中调出仿宋字体gb2312?本文将为您... 仿宋_GB2312是公文标准字体之一,仿China编程宋是字体名称,GB2312是字php符编码标准名称(简

VScode连接远程Linux服务器环境配置图文教程

《VScode连接远程Linux服务器环境配置图文教程》:本文主要介绍如何安装和配置VSCode,包括安装步骤、环境配置(如汉化包、远程SSH连接)、语言包安装(如C/C++插件)等,文中给出了详... 目录一、安装vscode二、环境配置1.中文汉化包2.安装remote-ssh,用于远程连接2.1安装2

vscode保存代码时自动eslint格式化图文教程

《vscode保存代码时自动eslint格式化图文教程》:本文主要介绍vscode保存代码时自动eslint格式化的相关资料,包括打开设置文件并复制特定内容,文中通过代码介绍的非常详细,需要的朋友... 目录1、点击设置2、选择远程--->点击右上角打开设置3、会弹出settings.json文件,将以下内

Window Server创建2台服务器的故障转移群集的图文教程

《WindowServer创建2台服务器的故障转移群集的图文教程》本文主要介绍了在WindowsServer系统上创建一个包含两台成员服务器的故障转移群集,文中通过图文示例介绍的非常详细,对大家的... 目录一、 准备条件二、在ServerB安装故障转移群集三、在ServerC安装故障转移群集,操作与Ser

windos server2022的配置故障转移服务的图文教程

《windosserver2022的配置故障转移服务的图文教程》本文主要介绍了windosserver2022的配置故障转移服务的图文教程,以确保服务和应用程序的连续性和可用性,文中通过图文介绍的非... 目录准备环境:步骤故障转移群集是 Windows Server 2022 中提供的一种功能,用于在多个

C#实现获取电脑中的端口号和硬件信息

《C#实现获取电脑中的端口号和硬件信息》这篇文章主要为大家详细介绍了C#实现获取电脑中的端口号和硬件信息的相关方法,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 我们经常在使用一个串口软件的时候,发现软件中的端口号并不是普通的COM1,而是带有硬件信息的。那么如果我们使用C#编写软件时候,如

龙蜥操作系统Anolis OS-23.x安装配置图解教程(保姆级)

《龙蜥操作系统AnolisOS-23.x安装配置图解教程(保姆级)》:本文主要介绍了安装和配置AnolisOS23.2系统,包括分区、软件选择、设置root密码、网络配置、主机名设置和禁用SELinux的步骤,详细内容请阅读本文,希望能对你有所帮助... ‌AnolisOS‌是由阿里云推出的开源操作系统,旨

PyTorch使用教程之Tensor包详解

《PyTorch使用教程之Tensor包详解》这篇文章介绍了PyTorch中的张量(Tensor)数据结构,包括张量的数据类型、初始化、常用操作、属性等,张量是PyTorch框架中的核心数据结构,支持... 目录1、张量Tensor2、数据类型3、初始化(构造张量)4、常用操作5、常用属性5.1 存储(st

Java操作PDF文件实现签订电子合同详细教程

《Java操作PDF文件实现签订电子合同详细教程》:本文主要介绍如何在PDF中加入电子签章与电子签名的过程,包括编写Word文件、生成PDF、为PDF格式做表单、为表单赋值、生成文档以及上传到OB... 目录前言:先看效果:1.编写word文件1.2然后生成PDF格式进行保存1.3我这里是将文件保存到本地后

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用