基于IAR环境下STM32F103单片机读取BME280程序

2020-07-25来源: 51hei关键字:IAR环境  STM32F103  单片机  读取BME280

自己编写的基于IAR环境下STM32F103单片机读取BME280程序,没有太多的寄存器操作,简单易懂,可以直接调用,上电后只要对IO口初始化,调用函数Bme_ReadDigValue()读取校准寄存器参数并保存,再调用函数Bme_Init()初始化之后就可以用函数Bme_ReadStatus()读取传感器状态判断是否读取数据了,也可不判断传感器状态直接读取数据,读取数据直接调用函数ReadBme280()。


单片机源程序:

void ReadBme280()

{

        u32 value_ad;

        double var1;

        double var2;

        double var3;

        

    double var4;

    double var5;

    double var6;

        

        double pressure;

        double pressure_min = 30000.0;

        double pressure_max = 110000.0;

        

        double humidity;

    double humidity_min = 0.0;

    double humidity_max = 100.0;

        

        u8 temp[10];

        

        ///////////////// temp /////////////////

        Bme_Read(Adds_RegValueTempStart,temp,3);

        value_ad = ( ((temp[0]<<16)+(temp[1]<<8)+(temp[2]&0xf0))>>4 );

        var1 = ( ((value_ad>>3)-(Bme280.dig_T1<<1))*Bme280.dig_T2 )>>11;

        var2 = (((((value_ad>>4)-Bme280.dig_T1)*((value_ad>>4)-Bme280.dig_T1))>>12)*Bme280.dig_T3)>>14;

        Bme280.t_fine = var1+var2;

        Bme280.temp = ( (Bme280.t_fine*5+128)>>8);

        Bme280.temp = Bme280.temp;

        ///////////////// press /////////////////

        Bme_Read(Adds_RegValuePressStart,temp,3);

        value_ad = ( ((temp[0]<<16)+(temp[1]<<8)+(temp[2]&0xf0))>>4 );

        var1 = ((double)Bme280.t_fine / 2.0) - 64000.0;

        var2 = var1 * var1 * ((double)Bme280.dig_P6) / 32768.0;

        var2 = var2 + var1 * ((double)Bme280.dig_P5) * 2.0;

        var2 = (var2 / 4.0) + (((double)Bme280.dig_P4) * 65536.0);

        var3 = ((double)Bme280.dig_P3) * var1 * var1 / 524288.0;

        var1 = (var3 + ((double)Bme280.dig_P2) * var1) / 524288.0;

        var1 = (1.0 + var1 / 32768.0) * ((double)Bme280.dig_P1);

        if (var1 > (0.0))

        {

                pressure = 1048576.0 - (double)value_ad;

                pressure = (pressure - (var2 / 4096.0)) * 6250.0 / var1;

                var1 = ((double)Bme280.dig_P9) * pressure * pressure / 2147483648.0;

                var2 = pressure * ((double)Bme280.dig_P8) / 32768.0;

                pressure = pressure + (var1 + var2 + ((double)Bme280.dig_P7)) / 16.0;

                if (pressure < pressure_min)

                {

                        pressure = pressure_min;

                }

                else if (pressure > pressure_max)

                {

                        pressure = pressure_max;

                }

        }

        else

        {

                pressure = pressure_min;

        }

        Bme280.press = pressure;

        Bme280.press = Bme280.press*100;

        ///////////////// humidity /////////////////

        Bme_Read(Adds_RegValueHumStart,temp,2);

        value_ad = ( (temp[0]<<8)+temp[1] );

        var1 = ((double)Bme280.t_fine) - 76800.0;

        var2 = (((double)Bme280.dig_H4) * 64.0 + (((double)Bme280.dig_H5) / 16384.0) * var1);

        var3 = value_ad - var2;

        var4 = ((double)Bme280.dig_H2) / 65536.0;

        var5 = (1.0 + (((double)Bme280.dig_H3) / 67108864.0) * var1);

        var6 = 1.0 + (((double)Bme280.dig_H6) / 67108864.0) * var1 * var5;

        var6 = var3 * var4 * (var5 * var6);

        humidity = var6 * (1.0 - ((double)Bme280.dig_H1) * var6 / 524288.0);

        if (humidity > humidity_max)

        {

                humidity = humidity_max;

        }

        else if (humidity < humidity_min)

        {

                humidity = humidity_min;

        }

        Bme280.hum =  humidity*100;// 结果包含2位小数

}

void BmeReset()

{

        u8 temp[50];

        temp[0] = CMD_Bme280Reset;

        Bme_Write(Reg_Bme280Reset,temp,1);

}


关键字:IAR环境  STM32F103  单片机  读取BME280 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic504418.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32步进伺服电机梯形加速源程序 单轴简易运动控制器
下一篇:STM32控制步进电机程序

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

IAR环境定义位变量标志位 STM8 MSP430通用
首先建立一个公共点H文件,加入通用代码如下typedef union{    struct    {        unsigned char b0:1;        unsigned char b1:1;        unsigned char b2:1;        unsigned char b3:1;        unsigned char b4:1;    &
发表于 2020-09-18
STM8 IAP升级程序设计详解 - IAR环境
)注意:可以通过 system_stm32f4xx 文件中的宏定义修改系统时钟频率(通过设置锁相环的相关系数),中断向量表的地址(位于SRAM还是Flsah,是否偏移,偏移地址多少等参数)b. __main()函数(在IAR中是 __iar_program_start ):该函数被封装进了编译器的库中,所以不同的IDE该函数的名称可以有所区别,但所实现的功能大致类似:1.完成全局变量/静态变量/常量的初始化和重定位工作.跳转进入__scatterload_rt2函数:通过设置四个寄存器来配置待copy内容(静态变量、全局变量、常量)的的加载域和运行域,设置待copy内容的大小,为后续__scatterload_cpy()函数服务
发表于 2020-09-11
STM8 IAP升级程序设计详解 - <font color='red'>IAR</font><font color='red'>环境</font>
HD7279A控制数码管(IAR环境
/***************************************************************************IAR环境,HD7279A,P4.0~CS,P4.1~CLK,P4.2~DATA,P4,3~KAY,DATA为串口数据口,时序图如下:CS:    ---------_________________________--------CLK:   ___________---___---___---___---__________DATA:  ---------~~~---~~~---~~~~---~~~-----------由430
发表于 2020-07-14
MSP432笔记--序
之前总念叨着,TI大法好,于是在学C51的同时,开始研究TI的低功耗单片机MSP430,从G2到F6系列,做过一些简单的项目,完成实验室的一些基本要求还是绰绰有余。半年之后,也就是15年前半年,TI出了其32位超低功耗单片机MSP432,官网上说LAUNCHPAD是限量版的黑色,于是便和队友下了订单,两天后,从德州寄到大连。然后虽然是东西到手了,但是丝毫没有时间和精力去学,因为考试周+暑期的电赛培训占去了大部分时间,于是一直吃灰到去年年底。某天心血来潮,把板子连上电脑,按照官方的文档配置IAR环境,写下第一个432程序1 #include "msp432p401r"2 3 int main
发表于 2020-04-25
IAR开发环境中添加头文件
今天在添加uart 驱动时,需要向现有的 uC/OS 工程文件中添加头文件。1. 直接在工程目录下新建一个目录,将uart.c 和 uart.h 添加到该目录下,2. 在工程项目上右键->add->add group ,添加一个组 uC-UART3. 在该组上继续右键->add->add file ,添加 uart.c 和 uart.h4. 修改includes.h ,添加 #include <uart.h>5. 此时直接编译会报错说无法找到<uart.h> ,还需要将上述目录添加到编译路径中,右键工程 ->option->C/C++ Compiler->prepro
发表于 2020-04-22
STM32F103停机模式测试
环境:主机:WIN7开发环境:MDK4.72MCU:STM32F101源代码://定义IO初始化结构体GPIO_InitTypeDef GPIO_InitStructure;    //设置zigbee模块进入低功耗模式inf_zigbee_sleep();    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |                        
发表于 2020-09-24
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved