2020-09-13
程序员文章站
2022-06-16 08:19:20
STM32移植BME680传感器输出IAQ(室内空气质量)1.准备材料软件: stm32cubemx 、IAR for arm、jlink(或者stlink)驱动(已安装请忽略)、任意的串口调试助手软件、我提供的“myfile”文件硬件: stm32f103ct6单片机、BME680传感器模块、jlink(或者stlink)烧录器、串口线(usb转ttl,ch340或者pl2303模块)、杜邦线IAR for arm 安装参考我的这篇博客https://blog.csdn.net/shuige2...
STM32移植BME680传感器输出IAQ(室内空气质量)
1.准备材料
软件: stm32cubemx 、IAR for arm、jlink(或者stlink)驱动(已安装请忽略)、任意的串口调试助手软件、我提供的“myfile”文件
硬件: stm32f103ct6单片机、BME680传感器模块、jlink(或者stlink)烧录器、串口线(usb转ttl,ch340或者pl2303模块)、杜邦线
IAR for arm 安装参考我的这篇博客
https://blog.csdn.net/shuige2215/article/details/108312156
2.说明
<1>此方法是基于stm32的HAL库完成的(1.能用stm32cubemx生产驱动代码2.能为BSEC库运行提供时间戳),用到的代码生产软件是stm32cubemx,强烈推荐!!!没用过的去问度娘。
<2>为什么使用IAR而不使用stm32开发常用的keil呢?因为输出IAQ用到的核心算法库libalgobsec.a文件,只有在IAR中支持(我是用keil没有成功,感兴趣可以再试试),如果不需要IAQ,可以用keil开发,但是如果不输出IAQ为啥不用更加便宜的BME280传感器呢。
<3>根据下图,确定自己选择的单片机是否有对应库文件以及rom是否够用,上面说的libalgobsec.a文件比较大,例如我们使用的stm32f103c8t6(cortex M3 128KB rom) libalgobsec.a需要的空间是20KB,lite版本是不带自动校准。stm8或者51等都是不支持IAQ输出的,没有对应的.a文件,限制还是挺多的
博世github 链接:https://github.com/BoschSensortec/BSEC-Arduino-library
3.让我们开始吧
<1>烧录方式设置,我们设置为SDW方式烧录,可以使用jlink或者stlink等烧录工具,当然串口烧录也是也可以的。
<2>配置时钟源,我们就全部使用单片机内部晶振,毕竟要是自己打板也能省点买晶振的钱
<3>配置i2c接口,BME680与单片机通过i2c接口连接,使用spi接口也可以,我们使用i2c,配置默认就可以
<4>配置串口1,打印传感器数据,默认配置,波特率115200
<5>设置堆栈
<6>工程必要的配置,以及生产工程文件
<7>先编译一下,确认没有问题。
<8>然后配置烧录器为jlink SWD方式下载,可以根据自己使用的烧录工具设定
<9>SWD方式
<10>添加“myfile”分组到工作空间
<11>将我提供的“myfile”文件,添加到工程文件夹下.注意区分两个“myfile”,第一个是添加到工作空间的目录结构叫“myfile”,第二个是我给你提供的以及写好的代码,添加到工程文件中。
<12>注意!!!我使用的是stm32f103c8t6 是cortex M3 ,一定要根据自己所选平台架构更换核心算法库libalgobsec.a文件
博世github 链接:https://github.com/BoschSensortec/BSEC-Arduino-library
<13>将工程文件夹下的四个文件添加到工作空间
<14>指定头文件相对路径
<15>添加串口重定向
<16>添加i2c读写函数
<17>添加i2c读写函数声明
<18>添加头件
<19>添加传感器配置,我们配置为3s模式,方便看到效果,上电5min输出第一个IAQ值,然后每3s输出一个,温湿度是实时的不需要等5min。还有一个是5min模式,上电30min输出第一个IAQ值,然后每5min输出一个IAQ值,这个是BSEC规定的,只有这两种模式,3s模式功耗900ua,5min模式功耗90ua。
修改这个宏定义#define APP_BSEC_SAMPLE_RATE BSEC_SAMPLE_RATE_LP
BSEC_SAMPLE_RATE_LP - Low power mode with sample period of 3 seconds.
BSEC_SAMPLE_RATE_ULP - Ultra low power mode with sample period of 5 minutes.
<20>传感器初始化和函数调用,我是1s调用一次,但也是每个3s才有一个数据输出,你完全可以设计成使用定时器传入next_call,定时采集。150%时间内必须要调用一次,也就是4.5s内必须调用一次,如果不按照规定,输出IAQ会不准确
<21>打印出来验证
4.有错误或者不明白给我留言
源码和用到的文件
链接:https://pan.baidu.com/s/1XCOVftrSTntzc_THm7WgOg
提取码:i0wo
本文地址:https://blog.csdn.net/shuige2215/article/details/108557911
上一篇: 数据库学习笔记-第N高问题
下一篇: c# 序列化与反序列化