N32L40XCL-STB开发板模块评测任务大挑战之测试软件IIC

接口/总线/驱动

1143人已加入

描述

1.测试环境
开发板:N32L40XCL-STB V1.0
开发环境:RT-Thread studio V2.2.6
RT-Thread版本:4.0.3
I2C外设资源:PB6—SCL PB7—SDA
传感器:AHT10

2.IIC
2.1 简介
I2C(Inter Integrated Circuit)总线是 PHILIPS 公司开发的一种半双工、双向二线制同步串行总线。I2C 总线传输数据时只需两根信号线,一根是双向数据线 SDA,另一根是双向时钟线 SCL,过这两根线,所有与 I2C 总线兼容的设备都可以通过 I2C 总线彼此直接通信。功能框图如下:

SDA

2.2 主要特征
同一接口既可实现主机功能又可实现从机功能
是并行总线到 I2C 总线协议的转换器
支持 7 位和 10 位的地址模式和广播寻址
作为 I2C 主设备可以产生时钟、起始信号和停止信号
作为 I2C 从设备具有可编程的 I2C 地址检测、停止位检测的功能

3.新建工程
首先打开RT-Thread studio安装N32L40XCL开发板的支持包。点击安装,变成绿色的installed即可

SDA

下面开始新建工程,点击由上角的文件-新建-RT-thread项目

SDA

4.编写测试程序
打开打开rt-thread settings,在硬件里面打开软件模拟IIC

SDA

添加AHT10的软件包,并打开Sensor框架,保存工程

SDA

/*

  • Copyright (c) 2006-2021, RT-Thread Development Team
  • SPDX-License-Identifier: Apache-2.0
  • Change Logs:
  • Date Author Notes
  • 2023-04-21 28345 the first version
    */
    // PB6--SCL PB7--SDA
    #include "aht10_sample.h"
    static rt_thread_t aht_10_thread = RT_NULL;
    float humidity, temperature;
    int rt_hw_aht10_port(void)
    {
    struct rt_sensor_config cfg;
    cfg.intf.dev_name = AHT10_I2C_BUS;
    cfg.intf.user_data = (void *)AHT10_I2C_ADDR;
    rt_hw_aht10_init("aht10", &cfg);
    return RT_EOK;
    }
    //INIT_ENV_EXPORT(rt_hw_aht10_port);
    //MSH_CMD_EXPORT(rt_hw_aht10_port,rt_hw_aht10_port);
    static void aht10_thread_entry(void *parameter)
    {
    aht10_device_t dev;
    rt_hw_aht10_port();
    dev = aht10_init(AHT10_I2C_BUS);
    if (dev == RT_NULL)
    {
    rt_kprintf(" The sensor initializes failure");
    return ;
    }
    else
    {
    rt_kprintf(" The sensor initializes ok!");
    }
    while (1)
    {
    // read temperature 采集温度
    temperature = aht10_read_temperature(dev);
    rt_kprintf("temperature: %d.%d ", (int) temperature, (int) (temperature * 10) % 10); //former is integer and behind is decimal
    // read humidity 采集湿度
    humidity = aht10_read_humidity(dev);
    rt_kprintf("humidity: %d.%d %% n", (int) humidity, (int) (humidity * 10) % 10); //former is integer and behind is decimal
    rt_thread_mdelay(5000);
    }
    }
    int aht10_sample_init(void)
    {
    aht_10_thread = rt_thread_create("aht10_thread", aht10_thread_entry, RT_NULL, 1024, 21, 10);
    //如果获得线程控制块,启动这个线程
    if (aht_10_thread != RT_NULL)
    {
    rt_thread_startup(aht_10_thread);
    return RT_EOK;
    }
    else
    {
    rt_kprintf("aht10 thread create failure !!! n");
    return RT_ENOMEM;
    }
    }
    MSH_CMD_EXPORT(aht10_sample_init,aht10_sample_init);

5.效果和实物展示

SDA

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分