基于RT-Thread(RTT)的BMP280气压计驱动(I2C通信)

前言

本文基于RTT操作系统使用STM32F401RET6驱动BMP280气压计模块,使用I2C协议通信
在这里插入图片描述

一、新建工程

在这里插入图片描述

二、添加软件包

在这里插入图片描述

三、添加这个包

在这里插入图片描述

四、打开CubeMX

在这里插入图片描述

五、配置时钟源,使用外部晶振

在这里插入图片描述

六、配置串行下载口

在这里插入图片描述

七、打开I2C,我这里使用的是I2C2,因为我原理图上连接的是I2C2

在这里插入图片描述

八、打开串口一,因为创建工程的时候默认使用串口一,这里顺便也配置一下

在这里插入图片描述

九、配置时钟线,直接拉满

在这里插入图片描述

十、生成代码

在这里插入图片描述

十一、在board.h中配置一下时钟(其实这里改不改关系不大,因为已经在CubeMX中配置了使用外部时钟,感兴趣可以自行查看其调用关系,这里改是为了看得爽些)

在这里插入图片描述

十二、打开I2C2的宏(具体用I2C几看自己的原理图),并绑定通讯口

在这里插入图片描述

十三、使能I2C模块

在这里插入图片描述

十四、打开I2C设备驱动程序

在这里插入图片描述

十五、打开传感器设备驱动

在这里插入图片描述

十六、编译一下,报如下错误

在这里插入图片描述

十七、点击错误进行跳转,将这段代码进行注释

在这里插入图片描述

十八、再次编译,报错解决

在这里插入图片描述

十九、在main.c文件中写入如下代码

/*
 * Copyright (c) 2006-2024, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2024-04-13     睡个好觉    first version
 */

#include <rtthread.h>
#include "sensor_bs_bmp280.h"

int bmp280_port(void);//bmp280初始化
rt_size_t Get_Data_Bmp280(void);//获取压力值

struct bmp280_dev bmp;

rt_uint32_t atmos = 0;  //大气压值

//初始化空闲时间
#define SYSTEM_INIT_TIME 300

int main(void)
{

    rt_thread_mdelay(SYSTEM_INIT_TIME);
    bmp280_port(); //bmp280初始化

    while(1)
    {
        Get_Data_Bmp280(); //读取BMP280数据
        rt_kprintf("%d \r\n",atmos);

        rt_thread_mdelay(20);
    }
}

int bmp280_port(void)
{
    struct rt_sensor_config cfg;
    cfg.intf.dev_name = BMP280_I2CBUS_NAME;
    cfg.intf.user_data = (void *)BMP280_ADDR_DEFAULT; //I2C从机地址
    rt_hw_bmp280_init("bmp280", &cfg);
    return 0;
}

rt_size_t Get_Data_Bmp280(void)
{
    struct bmp280_uncomp_data ucomp_data;
    uint32_t pres32;

    /* Reading the raw data from sensor */
    if(bmp280_get_uncomp_data(&ucomp_data, &bmp)!=BMP280_OK)
    {
        LOG_E("Reading the raw data from sensor error");
        return 0;
    }

    /* Getting the compensated pressure using 32 bit precision */
    bmp280_get_comp_pres_32bit(&pres32, ucomp_data.uncomp_press, &bmp);

    atmos = pres32;

    return 1;
}

二十、编译,有如下报错

在这里插入图片描述

二十一、打开ulog日志

在这里插入图片描述

二十二、然后在sensor_bs_bmp280.h头文件里面新增下图的两个文件包含

在这里插入图片描述

二十三、再次编译,报错解决

在这里插入图片描述

二十四、下载程序,打开串口查看,成功输出数据

在这里插入图片描述

番外:

如果你打印出这样的,读取数据错误,可以尝试检查两个地方

在这里插入图片描述

1、

找到这个从机地址,跳转进去

在这里插入图片描述

地址定义为这个,继续跳转进去

在这里插入图片描述

BMP280的从机地址有两个选择,0x76和0x77,模块出厂默认是0x76,确保你的地址选择正确

在这里插入图片描述

2、

第二个检查点就是这个I2C设备名,确保和你使用的是一致的

在这里插入图片描述

相关推荐

  1. RTL8762D I2C外设驱动

    2024-04-15 06:40:01       23 阅读
  2. 模拟I2C通信

    2024-04-15 06:40:01       38 阅读
  3. I2C通信协议:设备互联黄金标准

    2024-04-15 06:40:01       30 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-15 06:40:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-15 06:40:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-15 06:40:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-15 06:40:01       20 阅读

热门阅读

  1. ASP.NET基于BS方式的即时通讯软件的设计与实现

    2024-04-15 06:40:01       17 阅读
  2. [leetcode 链表] 反转链表 vs 链表相交

    2024-04-15 06:40:01       15 阅读
  3. Docker搭建Emby

    2024-04-15 06:40:01       46 阅读
  4. .Net 里面WhenAll的解释和用法

    2024-04-15 06:40:01       18 阅读
  5. 智能指针三剑客:shared_ptr

    2024-04-15 06:40:01       12 阅读
  6. 【LeetCode刷题记录】189. 轮转数组

    2024-04-15 06:40:01       17 阅读
  7. C语言--内存函数

    2024-04-15 06:40:01       12 阅读
  8. Zookeeper+Kafka

    2024-04-15 06:40:01       14 阅读
  9. Flume配置案例@Source:Kafka,Channel:File,Sink:HDFS

    2024-04-15 06:40:01       15 阅读
  10. 计算机视觉(CV)技术的优势和挑战

    2024-04-15 06:40:01       16 阅读