社区导航

 

搜索
查看: 1952|回复: 10

[环境传感器] 求LPS22HB压力传感器驱动

[复制链接]

18

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-5-25 16:47:41 | 显示全部楼层 |阅读模式
  最近在调试LPS22HB压力传感器驱动,不知道是程序有问题还是硬件有问题,读寄存器WHO_AM_I 都没有成功,求各位大神指点!急!!!!!!!!!!!!!!


回复

使用道具 举报

5531

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

发表于 2017-5-26 09:07:28 | 显示全部楼层
STSW-STLKT01例程里有这个驱动,官方的

hts221.rar (17.07 KB, 下载次数: 63)

评分

1

查看全部评分

虾扯蛋


回复

使用道具 举报

7431

TA的帖子

14

TA的资源

版主

Rank: 6Rank: 6

测评达人

发表于 2017-5-25 20:19:47 | 显示全部楼层
LPS22还是比较好用的,寄存器不多,容易计算。如果是I2C方式,注意器件地址不要设置错误。


回复

使用道具 举报

18

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2017-5-25 20:31:08 | 显示全部楼层
dcexpert 发表于 2017-5-25 20:19
LPS22还是比较好用的,寄存器不多,容易计算。如果是I2C方式,注意器件地址不要设置错误。

请问你有写好的驱动吗?可以参考下吗?

点评

我有micropython的程序,可以参考。 http://bbs.eeworld.com.cn/thread-513415-1-1.html 另外sensortile的软件包中有C语音的驱动。  详情 回复 发表于 2017-5-25 22:56


回复

使用道具 举报

7431

TA的帖子

14

TA的资源

版主

Rank: 6Rank: 6

测评达人

发表于 2017-5-25 22:56:07 | 显示全部楼层
hssjj1211 发表于 2017-5-25 20:31
请问你有写好的驱动吗?可以参考下吗?

我有micropython的程序,可以参考。

http://bbs.eeworld.com.cn/thread-513415-1-1.html

另外sensortile的软件包中有C语音的驱动。


回复

使用道具 举报

18

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2017-5-26 11:35:07 | 显示全部楼层
littleshrimp 发表于 2017-5-26 09:07
STSW-STLKT01例程里有这个驱动,官方的

谢谢大神


回复

使用道具 举报

18

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2017-5-26 16:22:31 | 显示全部楼层
dcexpert 发表于 2017-5-25 22:56
我有micropython的程序,可以参考。

http://bbs.eeworld.com.cn/thread-513415-1-1.html

另外senso ...

大哥,我没找到C语言驱动包啊?能再发一下吗?或直接发到我邮箱327209795@qq.com


回复

使用道具 举报

18

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2017-5-31 10:40:22 | 显示全部楼层

哪位大神帮我分析下我写的LPS22HB驱动程序,用的STM32单片机,采用的是SPI四线协议,看我的程序哪里有问题,特别是Read_LPS22HB()和Wrrite_LPS22HB()两个函数是不是有问题?




#include "LPS22HB.h"
#include "delay.h"       

void delay(void)       
{
        u8 i=0;
        for(i=0;i<10;i++)
        {
                ;
        }
}




void WRITE_LPS22HB(u8 adress ,u8 data)
{
       u8 i;
        u16 temp=adress*256+data;
       
        LPS_CS = 1;
        LPS_SCLK = 1;
        LPS_CS = 0;
        delay_ms(1);
        for(i=0;i<16;i++)
        {
                LPS_SCLK= 0;               
                temp=temp<<i;
                if(temp&0x8000)
                {               
                   Write_LPS=1;
                }
                else
                {
                         Write_LPS=0;
                }       
                delay();
                delay_us(1);       
                LPS_SCLK = 1;       
                delay();
                delay_us(1);       
        }
        LPS_CS = 1;       
}


void Read_LPS22HB(u8 adress,u8*data,u8 nBytesToRead)
{
       
        u8 i,j;
        LPS_CS = 0;
        delay_ms(1);
        LPS_SCLK = 1;
        for(i=0;i<8;i++)
        {
                LPS_SCLK= 0;
               
                adress=adress<<i;
               
                if(adress&0x80)
                {               
                   Write_LPS=1;
                }
                else
                {
                         Write_LPS=0;
                }       
                delay();       
                delay_us(1);               
                LPS_SCLK = 1;
                delay();
                delay_us(1);                       
        }
        for(j=0;j<nBytesToRead;j++)
        {
                for(i=0;i<8;i++)
                {
                        LPS_SCLK= 0;                       
                        data[j] = data[j]<< 1;
                        if(Read_LPS==1)
                        {
                                data[j] = data[j]+1;
                        }
                        delay();
                        delay_us(1);
                        LPS_SCLK = 1;
                        delay();
                        delay_us(1);
                }
  }
        LPS_CS = 1;
       
}       




void LPS22HB_Init(void)
{
   RCC->APB2ENR|=1<<3;    //使能PORTB时钟                         

   GPIOB->CRH&=0X0000FFFF;
   GPIOB->CRH|=0X83330000;

   WRITE_LPS22HB(0x10,0x20); // 写控制寄存器地址
   delay_ms(1);       
}

u16 adress=0;
u32 press=0;
u16 temper=0;
void LPS22HB_test(void)
{
    u8 temp[5]={0};               
    Read_LPS22HB(0x0F,temp,1);
    adress=temp[0];
    delay_ms(100);
    Read_LPS22HB(0x28,temp,5);
    press=temp[0]*65536+temp[1]*256+temp[2];
    temper=temp[3]*256+temp[4];

}










回复

使用道具 举报

1

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2017-12-20 17:27:19 | 显示全部楼层
hssjj1211 发表于 2017-5-31 10:40
哪位大神帮我分析下我写的LPS22HB驱动程序,用的STM32单片机,采用的是SPI四线协议,看我的程序哪里有问 ...

你好,请问是不是早调试完成了,我这遇到问题,读who_am_i就是不对,请教一下


回复

使用道具 举报

8

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-12-24 10:29:28 | 显示全部楼层
楼主你好,请问使用spi需不需要配置3线或者4线啊?我见官方提供的例程代码没有进行配置。我改写了这个代码,读出来的压力值不对,只有0.7kPa,温度值好像是对的。请指教,谢谢。

https://github.com/STMicroelectr ... /read_data_simple.c


回复

使用道具 举报

8

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-12-24 16:04:00 | 显示全部楼层
明白了,未配置默认是4线。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2019-1-20 23:17 , Processed in 0.297014 second(s), 18 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表