2020-09-13

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文件,限制还是挺多的2020-09-13_第1张图片

博世github 链接:https://github.com/BoschSensortec/BSEC-Arduino-library

3.让我们开始吧

<1>烧录方式设置,我们设置为SDW方式烧录,可以使用jlink或者stlink等烧录工具,当然串口烧录也是也可以的。2020-09-13_第2张图片

<2>配置时钟源,我们就全部使用单片机内部晶振,毕竟要是自己打板也能省点买晶振的钱2020-09-13_第3张图片

<3>配置i2c接口,BME680与单片机通过i2c接口连接,使用spi接口也可以,我们使用i2c,配置默认就可以2020-09-13_第4张图片

<4>配置串口1,打印传感器数据,默认配置,波特率115200

2020-09-13_第5张图片

<5>设置堆栈

2020-09-13_第6张图片

<6>工程必要的配置,以及生产工程文件

2020-09-13_第7张图片

<7>先编译一下,确认没有问题。

2020-09-13_第8张图片

<8>然后配置烧录器为jlink SWD方式下载,可以根据自己使用的烧录工具设定

2020-09-13_第9张图片

<9>SWD方式

2020-09-13_第10张图片

<10>添加“myfile”分组到工作空间

2020-09-13_第11张图片

<11>将我提供的“myfile”文件,添加到工程文件夹下.注意区分两个“myfile”,第一个是添加到工作空间的目录结构叫“myfile”,第二个是我给你提供的以及写好的代码,添加到工程文件中。2020-09-13_第12张图片

<12>注意!!!我使用的是stm32f103c8t6 是cortex M3 ,一定要根据自己所选平台架构更换核心算法库libalgobsec.a文件

2020-09-13_第13张图片

博世github 链接:https://github.com/BoschSensortec/BSEC-Arduino-library

<13>将工程文件夹下的四个文件添加到工作空间

2020-09-13_第14张图片

<14>指定头文件相对路径

2020-09-13_第15张图片

<15>添加串口重定向

2020-09-13_第16张图片

<16>添加i2c读写函数

2020-09-13_第17张图片

<17>添加i2c读写函数声明

2020-09-13_第18张图片

<18>添加头件

2020-09-13_第19张图片

<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.

2020-09-13_第20张图片

<20>传感器初始化和函数调用,我是1s调用一次,但也是每个3s才有一个数据输出,你完全可以设计成使用定时器传入next_call,定时采集。150%时间内必须要调用一次,也就是4.5s内必须调用一次,如果不按照规定,输出IAQ会不准确

2020-09-13_第21张图片

<21>打印出来验证

2020-09-13_第22张图片

4.有错误或者不明白给我留言

源码和用到的文件

链接:https://pan.baidu.com/s/1XCOVftrSTntzc_THm7WgOg

提取码:i0wo

你可能感兴趣的:(STM32,嵌入式,单片机)