读取HP203B气压传感器(I2C)

2023-05-16

1 项目功能
通过HB203B测量温度、大气压和海拔高度,并用数码管显示大气压。

2 电路原理图


3 传感器HP203B
3.1 HP203B功能
HP203B是一款超小型集高精度气压计、 高度计和温度计于一体的传感器。内部集成了24位ADC,硅传感芯片,以及存放内部参数的OTP。该传感器通过设计公司获得的专利补偿算法在传感器器件片内进行采样,信号处理以及运算,最终计算出实际的直接结果值,所以外部应用MCU只需发出信号采集命令,待完成温度压力采样后,HP203B自动计算海拔高度,单片机可以通过I²C接口直接读取压力,温度及绝对海拔高度三者的值。

每个设备都是由工厂单独校准温度和压力测量。修正的值存储在芯片上的 128 字节的非易失性内存(NVM)。在正常情况下, 用户完成没有必要做进一步校准。

3.2 HP203B技术指标


3.3 HP203B I2C总线接口命令
I2C地址

掌上实验室V8把HP203B的CSB连接了高电平。所以读写地址分别为0xED和0xEC。

  

 HP203B上电后先自校准,然后进入休眠模式等待指令,收到指令后执行指令,执行完毕则再次进进入休眠模式等待下一条指令。

 ADC_CVT转换指令

设置转换分辨率、转换通道(温度、压力或者温度+压力)并开始转换。

bit7    bit6    bit5    bit4    bit3    bit2    bit1    bit0
0    1    0    分辨率OSR    通道


 例如采用最高分辨率4096,选择压力+温度,则二进制为 010 000 00,此时 ADC_CVT=0x40。

下表是分辨率对应的转换时间,可以看到分辨率越高所需的时间越长。

 I2C主机发送指令如下,

设备地址    W    ACK    指令    ACK    
S    1    1    1    0    1    1    0    0    A    0    1    0    0    0    0    0    0    A    P
其中S-起始信号,P-终止信号,A-应答信号。深色表示从机发送。

READ_P读气压值

需要分两帧发送,先发送读气压值命令0x30,然后再读3个字节气压值(高字节MSB在前)。

 其中S-起始信号,P-终止信号,A-应答信号,N-非应答信号。深色表示从机发送。

气压值是由24位补码表示,最高 4 位的数据是无用,而最低有效 20 位代表气压的值。用户应当把这 20 位以 2 的补码的二进制值转换成一个整数,然后整数除以 100 获得最终结果。

 READ_A读高度值

需要分两帧发送,先发送读高度值命令0x31,然后再读3个字节高度值(高字节MSB在前)。

 其中S-起始信号,P-终止信号,A-应答信号,N-非应答信号。深色表示从机发送。

高度值是由24位补码表示,最高 4 位的数据是无用,而最低有效 20 位代表高度的值。用户应当把这 20 位以 2 的补码的二进制值转换成一个整数,然后整数除以 100 获得最终结果。

  READ_T读温度值

需要分两帧发送,先发送读压力值命令0x32,然后再读3个字节温度值(高字节MSB在前)。

 其中S-起始信号,P-终止信号,A-应答信号,N-非应答信号。深色表示从机发送。

温度值是由24位补码表示,最高 4 位的数据是无用,而最低有效 20 位代表温度的值。用户应当把这 20 位以 2 的补码的二进制值转换成一个整数,然后整数除以 100 获得最终结果。

//20位补码处理
 
int data;
 
data &= 0xfffff;         //保留20位
if(data & 0x80000)
    data |= 0xfff00000;  //扩展符号位
READ_REG读寄存器值

寄存器INT_SRC的bit5(DEV_RDY)表示处于Sleep状态(可以作为转换完成标志)。比如读取寄存器INT_SRC,命令为0x80+6位寄存器地址,即0x8D。

其中S-起始信号,P-终止信号,A-应答信号,N-非应答信号。深色表示从机发送。

4 示例代码
本例用到的驱动包有crm、gpio、misc和tmr。采用GPIO模拟I2C操作,项目包含以下几个文件

main.c

#include "at32f403a_407_conf.h"
 
#include "util.h"
#include "display.h"
#include "hp203b.h"
 
/**
  * @brief  config sclk 64 mhz with hick clock source.
  * @note   the system clock is configured as follow:
  *         - system clock        = hick / 2 * pll_mult
  *         - system clock source = pll (hick)
  *         - hick                = 8000000
  *         - sclk                = 64000000
  *         - ahbdiv              = 1
  *         - ahbclk              = 64000000
  *         - apb2div             = 2
  *         - apb2clk             = 32000000
  *         - apb1div             = 2
  *         - apb1clk             = 32000000
  *         - pll_mult            = 16
  *         - pll_range           = LE72MHZ (less equal 72 mhz)
  * @param  none
  * @retval none
  */
static void sclk_64m_hick_config(void)
{
  /* reset crm */
  crm_reset();
 
  crm_clock_source_enable(CRM_CLOCK_SOURCE_HICK, TRUE);
 
   /* wait till hick is ready */
  while(crm_flag_get(CRM_HICK_STABLE_FLAG) != SET)
  {
  }
 
  /* config pll clock resource */
  crm_pll_config(CRM_PLL_SOURCE_HICK, CRM_PLL_MULT_16, CRM_PLL_OUTPUT_RANGE_LE72MHZ);
 
  /* enable pll */
  crm_clock_source_enable(CRM_CLOCK_SOURCE_PLL, TRUE);
 
  /* wait till pll is ready */
  while(crm_flag_get(CRM_PLL_STABLE_FLAG) != SET)
  {
  }
 
  /* config ahbclk */
  crm_ahb_div_set(CRM_AHB_DIV_1);
 
  /* config apb2clk */
  crm_apb2_div_set(CRM_APB2_DIV_2);
 
  /* config apb1clk */
  crm_apb1_div_set(CRM_APB1_DIV_2);
 
  /* enable auto step mode */
  crm_auto_step_mode_enable(TRUE);
 
  /* select pll as system clock source */
  crm_sysclk_switch(CRM_SCLK_PLL);
 
  /* wait till pll is used as system clock source */
  while(crm_sysclk_switch_status_get() != CRM_SCLK_PLL)
  {
  }
 
  /* disable auto step mode */
  crm_auto_step_mode_enable(FALSE);
 
  /* update system_core_clock global variable */
  system_core_clock_update();
}
 
int main(void)
{
    static int count = 0;
    sclk_64m_hick_config();
    
    HP203B_gpio_pins_init();
    DISP_gpio_pins_init();
    
    HP203B_Reset();
    delay_ms(100);
 
 
    HP203B_StartConv();
    for(;;){
        dispaly_scan();
        if(HP203B_ReadReg(0x0d) & 0x40)
        {
            float pressure, temperature, altitude;
            HP203B_ReadData(&temperature, &pressure, &altitude);
            display_dec_int(pressure+0.5); //四舍五入显示
            HP203B_StartConv();
        }
    }
}
util.h

#ifndef __UTIL_H
#define __UTIL_H
 
void delay_us(int us);
void delay_ms(int ms);
 
#endif
util.c

#include "at32f403a_407_conf.h"
 
 
void delay_us(int us)
{
    SysTick->LOAD = system_core_clock/1000000 * us; 
    SysTick->VAL = 0;
    SysTick->CTRL = 0x5; //Systick采用系统时钟为时钟源,并启动
    while((SysTick->CTRL & (1<<16))==0);
    SysTick->CTRL = 0;     //停止Systick
}
 
void delay_ms(int ms)
{
    for(;ms>0;ms--)
        delay_us(1000);
}
display.h

#ifndef __DISPLAY_H
#define __DISPLAY_H
 
void DISP_gpio_pins_init(void);
 
void display_scan();
 
void display_dec_int(int num);
 
#endif
display.c

#include "at32f403a_407_conf.h"
 
void DISP_gpio_pins_init(void)
{
    //打开GPIO时钟
    crm_periph_clock_enable(CRM_GPIOE_PERIPH_CLOCK, TRUE);
    crm_periph_clock_enable(CRM_GPIOD_PERIPH_CLOCK, TRUE);
    
    //配置PD2~PD5, PE0~PE7为输出
    gpio_init_type gpio_init_struct;
    
    gpio_init_struct.gpio_pins  = GPIO_PINS_0 | GPIO_PINS_1 | GPIO_PINS_2 | GPIO_PINS_3 | GPIO_PINS_4 | GPIO_PINS_5 | GPIO_PINS_6 | GPIO_PINS_7;
    gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
    gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
    gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
    gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
 
    gpio_init(GPIOE, &gpio_init_struct);
 
    gpio_init_struct.gpio_pins  = GPIO_PINS_2 | GPIO_PINS_3 | GPIO_PINS_4 | GPIO_PINS_5;
    gpio_init(GPIOD, &gpio_init_struct);
}
 
uint8_t disp_buf[4];
void display_dec_int(int num)
{
    static uint8_t tab[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
    disp_buf[0] = tab[num/1000%10];
    disp_buf[1] = tab[num/100%10];
    disp_buf[2] = tab[num/10%10];
    disp_buf[3] = tab[num%10];
}
 
void display_scan()
{
    static int cur_digit = 0;
    
    //全关
    gpio_bits_set(GPIOD, GPIO_PINS_2 | GPIO_PINS_3 | GPIO_PINS_4 | GPIO_PINS_5); 
    
    //输出字形码
    gpio_bits_reset(GPIOE, 0xff); //PE0~PE7 = 0
    gpio_bits_set(GPIOE, disp_buf[cur_digit]); 
    
    //打开对应位开关
    gpio_bits_reset(GPIOD, GPIO_PINS_2 << cur_digit);
    
    //更新cur_digit, 准备下一次扫描
    cur_digit = (cur_digit + 1) % 4;
}
hp203b.h

#ifndef __HP203B_H
#define __HP203B_H
 
void HP203B_gpio_pins_init(void);
 
void HP203B_Reset(void);
void HP203B_StartConv(void);
unsigned char HP203B_ReadReg(unsigned char reg_addr);
void HP203B_WriteReg(unsigned char reg_addr, unsigned char reg_val);
 
void HP203B_ReadData(float *T, float *P, float *A);
 
#endif
hp203b.c

#include "at32f403a_407_conf.h"
 
#include "util.h"
 
 
/******************************************************************************
I2C 基本操作
*/
void HP203B_gpio_pins_init(void)
{
    crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
    crm_periph_clock_enable(CRM_GPIOC_PERIPH_CLOCK, TRUE);
 
    gpio_init_type gpio_init_struct;
    gpio_default_para_init(&gpio_init_struct);
 
    gpio_init_struct.gpio_pins  = GPIO_PINS_8;
    gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
    gpio_init_struct.gpio_out_type = GPIO_OUTPUT_OPEN_DRAIN;
    gpio_init(GPIOA, &gpio_init_struct);
    
    gpio_init_struct.gpio_pins  = GPIO_PINS_9;
    gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
    gpio_init_struct.gpio_out_type = GPIO_OUTPUT_OPEN_DRAIN;
    gpio_init(GPIOC, &gpio_init_struct);
 
}
 
 
static void SCL_OPEN(void)
{
    gpio_bits_set(GPIOA, GPIO_PINS_8);
}
static void SCL_LOW(void)
{
    gpio_bits_reset(GPIOA, GPIO_PINS_8);
}
static void SDA_OPEN(void)
{
    gpio_bits_set(GPIOC, GPIO_PINS_9);
}
static void SDA_LOW(void)
{
    gpio_bits_reset(GPIOC, GPIO_PINS_9);
}
static uint8_t SCL_READ()
{
    return gpio_input_data_bit_read(GPIOA, GPIO_PINS_8);
}
static uint8_t SDA_READ()
{
    return gpio_input_data_bit_read(GPIOC, GPIO_PINS_9);
}
 
static void I2c_GenStart()
{
    SDA_OPEN();
    delay_us(1);
    SCL_OPEN();
    delay_us(1);
    SDA_LOW();
    delay_us(4);  // hold time start condition (t_HD;STA)
    SCL_LOW();
    delay_us(4);
}
static void I2c_GenStop()
{
    SCL_LOW();
    delay_us(1);
    SDA_LOW();
    delay_us(1);
    SCL_OPEN();
    delay_us(4); // set-up time stop condition (t_SU;STO)
    SDA_OPEN();
    delay_us(4);
}
 
static int I2c_WriteByte(uint8_t txByte)
{
    uint8_t mask;
    int Acked = 1;
    for(mask = 0x80; mask > 0; mask >>= 1) { // shift bit for masking (8 times)
        if((mask & txByte) == 0) 
            SDA_LOW();                // masking txByte & write to SDA-Line
        else                     
            SDA_OPEN();   
        delay_us(1);                // data set-up time (t_SU;DAT)
        SCL_OPEN();         // generate clock pulse on SCL
        delay_us(5);        // SCL high time (t_HIGH)
        SCL_LOW();                             
        delay_us(1);        // data hold time(t_HD;DAT)
    }                       
 
    SDA_OPEN();           // release SDA-line
    SCL_OPEN();           // clk #9 for ack
 
    delay_us(5);          // data set-up time (t_SU;DAT)
    if(SDA_READ()) 
        Acked = 0;          // check ack from i2c slave
    SCL_LOW();                               
    delay_us(20);         // wait to see byte package on scope
    return Acked;         // return error code
}
 
static uint8_t I2c_ReadByte(int GenAck)
{
    uint8_t mask;
    uint8_t rxByte = 0;
    SDA_OPEN();                                  // release SDA-line
    for(mask = 0x80; mask > 0; mask >>= 1) {     // shift bit for masking (8 times)
        SCL_OPEN();                                // generate clock pulse on SCL
        delay_us(1);                                      // data set-up time (t_SU;DAT)
        while(SCL_READ() == 0){}                // wait while hold master
        delay_us(5);                                      // SCL high time (t_HIGH)
        if(SDA_READ()) rxByte = rxByte | mask;  // read bit
        SCL_LOW();                             
        delay_us(1);                                      // data hold time(t_HD;DAT)
    }                                        
    if(GenAck) 
      SDA_LOW();                                            // send acknowledge if necessary
    else           
      SDA_OPEN();
    
    delay_us(1);                                        // data set-up time (t_SU;DAT)
    SCL_OPEN();                                  // clk #9 for ack
    delay_us(5);                                        // SCL high time (t_HIGH)
    SCL_LOW();                               
    SDA_OPEN();                                  // release SDA-line
    delay_us(20);                                       // wait to see byte package on scope
    return rxByte;                               // return error code
}
 
/******************************************************************************
HP203B 基本操作
*/
 
void HP203B_Reset(void)
{
    I2c_GenStart();
    I2c_WriteByte(0xEC); //addr+w
    I2c_WriteByte(0x06); //cmd reset
    I2c_GenStop();
}
void HP203B_StartConv(void)
{
    I2c_GenStart();
    I2c_WriteByte(0xEC); //addr+w
    I2c_WriteByte(0x40); //cmd conv+osr(4096)+ch(pt)
    I2c_GenStop();
}
 
unsigned char HP203B_ReadReg(unsigned char reg_addr)
{
    I2c_GenStart();
    I2c_WriteByte(0xEC); //devaddr+w
    I2c_WriteByte(0x80|reg_addr); //reg addr
    I2c_GenStop();
 
    I2c_GenStart();
    I2c_WriteByte(0xED); //addr+r
    char val = I2c_ReadByte(0); //read + nack
    I2c_GenStop();
    
    return val;
}
void HP203B_WriteReg(unsigned char reg_addr, unsigned char reg_val)
{
    I2c_GenStart();
    I2c_WriteByte(0xEC); //devaddr+w
    I2c_WriteByte(0x80|reg_addr); //reg addr
    I2c_WriteByte(reg_val);
    I2c_GenStop();
}
 
void HP203B_ReadData(float *T, float *P, float *A)
{
    uint8_t buf[6],status;
    int data;
    
    //read Pressure
    I2c_GenStart();
    I2c_WriteByte(0xEC); //addr+w
    I2c_WriteByte(0x30); //cmd read p
    I2c_GenStop();
    
    I2c_GenStart();
    I2c_WriteByte(0xED); //addr+r
    buf[0] = I2c_ReadByte(1); //read + ack
    buf[1] = I2c_ReadByte(1); //read + ack
    buf[2] = I2c_ReadByte(0); //read + nack
    I2c_GenStop();
    
    data = ((buf[0] << 16) | (buf[1] << 8) | buf[2]) & 0xfffff;
    if(data & 0x80000)
        data |= 0xfff00000;            //补码处理
    *P = data/100.0;                    //单位 mbar
    
    //read Temperature
    I2c_GenStart();
    I2c_WriteByte(0xEC); //addr+w
    I2c_WriteByte(0x32); //cmd read t
    I2c_GenStop();
    
    I2c_GenStart();
    I2c_WriteByte(0xED); //addr+r
    buf[0] = I2c_ReadByte(1); //read + ack
    buf[1] = I2c_ReadByte(1); //read + ack
    buf[2] = I2c_ReadByte(0); //read + nack
    I2c_GenStop();
    
    data = ((buf[0] << 16) | (buf[1] << 8) | buf[2]) & 0xfffff;
    if(data & 0x80000)
        data |= 0xfff00000;            //补码处理
    
    *T = data/100.0;                    //单位 摄氏度
    //read Altitude
    I2c_GenStart();
    I2c_WriteByte(0xEC); //addr+w
    I2c_WriteByte(0x31); //cmd read a
    I2c_GenStop();
    
    I2c_GenStart();
    I2c_WriteByte(0xED); //addr+r
    buf[0] = I2c_ReadByte(1); //read + ack
    buf[1] = I2c_ReadByte(1); //read + ack
    buf[2] = I2c_ReadByte(0); //read + nack
    I2c_GenStop();
    
    data = ((buf[0] << 16) | (buf[1] << 8) | buf[2]) & 0xfffff;
    if(data & 0x80000)
        data |= 0xfff00000;            //补码处理
    *A = data/100.0;                    //单位 0.01m

}

————————————————
版权声明:本文为CSDN博主「lg28870983」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lg28870983/article/details/121724908

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

读取HP203B气压传感器(I2C) 的相关文章

  • i2c信号的ACK与NACK

    nbsp nbsp nbsp nbsp nbsp nbsp nbsp 我们平时在调试I2C的时候可能很少去关注NACK信号 只知道如果Master发送数据 MSB先发 LSB后发 连续发送一个字节 8个bit 之后Slave会回复一个ACK
  • nRF52832的I2C例程代码

    nRF52832的I2C例程代码 include 34 nrf drv i2c h 34 include 34 app error h 34 define I2C SCL PIN 0 SCL引脚号 define I2C SDA PIN 1
  • DHT12温湿度传感器IIC,I2C接口调试心得和代码说明

    来源 xff1a http www fuhome net bbs forum php mod 61 viewthread amp tid 61 2141 DHT11那个单总线的温湿度传感器用的很多了 xff0c aosong推出了DHT12
  • PX4使用I2C方式添加自定义传感器(1)

    PX4使用I2C方式添加自定义传感器 xff08 1 xff09 前言 毕业设计就是要在PX4上添加一个传感器 xff08 角度传感器 xff09 xff0c 由于板子上的接口数量很少 xff0c 很是宝贵 最后只能选择通过I2C通信方式
  • PX4通过I2C方式添加自定义传感器(3)

    添加自定义传感器并实现数据的发送和订阅 1 前期准备 1 1 建立文件夹和相关文件配置 我是在src drivers distance sensor文件夹下操作的 xff0c 当然其他文件夹下都类似 首先建立了两个文件夹angle sour
  • 通信方式梳理:GPIO,I2C,SPI,UART,USART,USB的区别

    GPIO xff0c I2C xff0c SPI xff0c UART xff0c USART xff0c USB的区别 1 简单区别 xff1a 1 xff09 GPIO xff08 General Purpose Input Outpu
  • 基于I2C/SPI的温湿度采集与OLED显示

    基于I2C SPI的温湿度采集与OLED显示 一 AHT20温湿度采集1 I2C2 温湿度采集代码效果 二 OLED显示1 显示学号姓名2 诗句显示 三 总结四 参考 一 AHT20温湿度采集 1 I2C 解释什么是 软件I2C 和 硬件I
  • STM32软件模拟I2C从机的实现方法

    1 1 前言 在使用I2C通信时 xff0c 一般会用到软件模拟I2C 目前网络上能搜索到的软件模拟I2C一般都是模拟I2C主机 xff0c 很少有模拟I2C从机的例程 由于I2C主机在进行数据收发时 xff0c 有明确的可预见性 xff0
  • I2C调试工具

    1 I2C调试工具 i2c tools工具是开源I2C调试工具 xff0c 具有获取I2C总线挂载的设备列表及设备地址 xff0c 可对指定设备指定寄存器进行读写的功能 ubuntu安装 xff1a apt get install libi
  • 海思文件系统缺少文件himm 、i2c_read 、i2c_write 、ssp_read 、ssp_write

    原因 xff1a 海思根文件默认没有把himm i2c read i2c write ssp read ssp write工具集成在bin里 xff0c 但是在sdk中 解决办法 xff1a cd osdrv tools board reg
  • I2C驱动App

    1 查看eeprog c源代码 copyright C by 2009 Guangzhou FriendlyaRM in China email capbily 64 163 com website arm9 net include lt
  • STM32设置为I2C从机

    硬件平台 STM32F401 编辑器 keil 5 18 操作系统 win7 一 I2C协议 在传输数据的时候 SDA线必须在时钟的高电平周期保持稳定 SDA的高或低电平状态只有在SCL 线的时钟信号是低电平时才能改变 起始和停止条件 SC
  • ESP8266如何使用u8g2(I2C)驱动SH1106的OLED

    u8g2是一款单色图形库 非常适合12864之类的显示屏 基本上支持了市面上的主流显示控制器 可是偏偏对SH1106不是那么友好 使用起来不是很方便 打开IDE的示例程序可以看到对SH1106列出来的几乎都SPI通信方式 仅仅只有一条是使用
  • Linux下CH452数码管芯片驱动调试(GPIO模拟I2C)

    1 设备连接 主控板处理器为Cortex A5处理器 内核4 9 0 主控板和CH452引脚定义如下表1 1所示 表1 1 主控板和CH452引脚定义 序号 CH452引脚定义 主控板引脚定义 1 SDA PB29 2 SCL PB30 3
  • Raspberry Pi上设置I2C LCD

    在本教程中 我将向您展示使用I2C设置LCD所需的一切 连接LCD I2C也被称为两线接口 因为它仅使用两根线来发送和接收数据 实际上 如果算上Vcc和地线 则是4线 但是电源始终可以来自其他来源 连接启用I2C的LCD 将LCD与I2C背
  • 使用 C++ 和 i2c 工具从虚拟 i2c 写入和读取

    我正在尝试使用 C 写入和读取 I2C 总线 我的I2C总线是虚拟的 第一件事是加载内核模块i2c stub 我可以通过 bash 完成所有事情 现在我将其移植到 C 我可以打开i2c总线 获取特定地址的i2c总线 但无法读写 我正在虚拟化
  • 是否有通用 I2C 命令来查看设备是否仍然存在于总线上?

    是否有通用的 I2C 命令来查看设备在初始化一次后是否仍然存在于总线上 例如 OLED 显示器 我问这个的原因是为了避免主程序由于库代码中存在无限循环而冻结 当设备断开连接时 例如 Wire 库 在 MCU 启动时 我想检查设备是否可用 并
  • 为什么 i2c_smbus 函数不可用? (I2C——嵌入式Linux)

    有很多参考使用i2c smbus 开发嵌入式 Linux 软件时在 I2C 总线上进行通信的函数 什么时候i2c smbus函数如i2c smbus read word data在软件项目中引用了 ARM8 处理器错误 例如 i2c smb
  • 如何转换温度传感器得到的值?

    我在ST工作Temperature sensor hts221 我用I2C与传感器的命令通信 我从文档中看到类似以下文字 enter code here Temperature data are expressed as TEMP OUT
  • Linux、ARM:为什么仅当启动时存在 I2C GPIO 扩展器时才创建 gpiochip

    在 imx6sx 硬件平台 NXP 嵌入式 ARM 上使用 Linux 3 14 52 问题是设备树中指定的 PCF8575 I2C GPIO 扩展器不会实例化为 sys class gpio 结构中的设备 除非它们在内核启动期间存在 这些

随机推荐

  • 光速幂

    warning xff1a 如果你还没有学过快速幂 xff0c 请掉头先学快速幂因为快速幂的适用范围比这个东西更广 我们先回忆一下快速幂是怎么解决的 我们是利用二进制的性质将复杂度优化到单词询问 O log i n
  • 队列的线性存储结构 c语言 数据结构 简单易懂 超详细~~

    include lt stdio h gt include lt stdlib h gt typedef int Elemtype define maxsize 100 typedef struct queue 注意再用顺序结构来表示栈和队
  • 复杂网络入门详解 适用于初学者。超详细~~

    一复杂网络的特性 1 复杂网络的特性之 小世界特性 xff1a xff08 1 xff09 社交网络中任何一个成员和任何一个认识的人之间的间隔人数不会超过六个人 即通过小于六个人 xff0c 总能找到社交网络中任何一个成员 xff08 2
  • Ubuntu系统中/usr/share/applications/目录下都是.desktop文件没有快捷方式

    在虚拟机中运行Ubuntu系统不免要安装一些linux应用软件 xff0c 为了方便我们会在虚拟机的桌面添加相应软件的快捷方式 一般情况下 xff0c 软件的快捷方式会保存在 usr share applications 目录下 我们可能会
  • my.cnf 中方便使用的设置

    记录my cnf 中一些方便使用的设置 vi etc my cnf 1 通过 prompt 61 name可以自定义提示信息 xff0c 通过配置显示登入的主机地址 xff0c 登陆用户名 xff0c 当前时间 xff0c 当前数据库sch
  • ubuntu环境下安装Jenkins

    文章目录 ubuntu环境下安装Jenkins方法一 war包安装1 34 启动脚本设置5 创建配置文件6 运行Jenkins 方法二 apt安装 问题记录1 启动jenkins报错 Failed to start Jetty或Failed
  • 打印1-100之间所有素数

    代码 方法1 方法2 执行结果 求1 10之间非素数之和
  • 打印出所有水仙花数

    水仙花数是指一个三位数 xff0c 其各位数字立方和等于该数本身 例如153 61 43 43 一重循环方式实现 首先分别求出三位数 i 的百位数 a 十位数 b 和个位数 c 之后判断a的立方和加b的立方和和c的立方和是否等于该三位数 i
  • LT8618SX寄存器配置

    LT8618SX功能 RGB输入 支持24位RGB xff0c YUV和BT656 BT601 BT1120输入 支持SDR和DDR数据采样 可编程上升 下降边缘时钟输入 支持高达148 5MHz DDR或297MHz SDR时钟输入 支持
  • linux重定向串口打印到telnet ssh远程终端

    源码 xff1a log c span class token macro property span class token directive hash span span class token directive keyword i
  • [HAOI2012] 高速公路

    这道题有一种解法是维护区间和 xff0c 区间和 i times i i xff0c 区间和 i 2
  • rtsp鉴权认证(密码登录)

    Rtsp认证主要分为两种 xff1a 基本认证 xff08 basic authentication xff09 和摘要认证 xff08 digest authentication xff09 基本认证是http 1 0提出的认证方案 xf
  • 基于RK3399的LED驱动开发

    1 添加设备树 在设备树 arch arm64 boot dts rockchip rk3399 firefly linux dts 中添加 gpio span class token operator span led span clas
  • RK3399 CAN接口配置设备树(mcp2515)

    RK3399 CAN接口配置设备树 xff08 mcp2515 xff09 kernel需先配置config xff0c 增加mcp2515支持 xff0c Networking support gt CAN bus subsystem s
  • RK3399 ALC5640芯片配置

    说明 xff1a 本文适用于 RK3399 linux 4 4 内核系列SDK 硬件上 xff0c 音频外部 codec 芯片 i2s 引脚与 RK3399 i2s1连接 软件上需要加下述patch解决噪声问题 xff08 以 rt5640
  • random: crng init done太慢影响程序运行

    现象 xff1a 内核打印random crng init done之后QT应用程序才启动 xff08 特别是emmc分区后很慢 xff09 3 412968 usb 1 1 New USB device found idVendor 61
  • 应用程序利用libusb读取usb设备数据

    USB HID 类是 USB 设备的一个标准设备类 xff0c 属于人机交互操作的 设备 xff0c 包括鼠标 键盘等 xff0c 主要用于人与计算机进行交互 xff0c 它还可用来传输数据 控制设备等 非标USB设备 xff0c 应用程序
  • RK3568读取DS18B20温度(单总线驱动)

    RK3568读取DS18B20温度 xff08 单总线驱动 xff09 xff0c 以下为驱动代码和Makefile xff0c 以及测试程序代码 18B20数字温度传感器提供9 Bit到12 Bit 的摄氏温度测量精度和一个用户可编程的非
  • 读取字库文件显示OSD(HI3536平台VPSS)

    include lt stdio h gt include lt unistd h gt include lt stdlib h gt include lt string h gt include lt sys types h gt inc
  • 读取HP203B气压传感器(I2C)

    1 项目功能 通过HB203B测量温度 大气压和海拔高度 xff0c 并用数码管显示大气压 2 电路原理图 3 传感器HP203B 3 1 HP203B功能 HP203B是一款超小型集高精度气压计 高度计和温度计于一体的传感器 内部集成了2