最近在调试LPS22HB压力传感器驱动,不知道是程序有问题还是硬件有问题,读寄存器WHO_AM_I 都没有成功,求各位大神指点!急!!!!!!!!!!!!!!
LPS22还是比较好用的,寄存器不多,容易计算。如果是I2C方式,注意器件地址不要设置错误。
我有micropython的程序,可以参考。
https://bbs.eeworld.com.cn/thread-513415-1-1.html
另外sensortile的软件包中有C语音的驱动。
哪位大神帮我分析下我写的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<
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<
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
{
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];
}
你好,请问是不是早调试完成了,我这遇到问题,读who_am_i就是不对,请教一下
楼主你好,请问使用spi需不需要配置3线或者4线啊?我见官方提供的例程代码没有进行配置。我改写了这个代码,读出来的压力值不对,只有0.7kPa,温度值好像是对的。请指教,谢谢。
https://github.com/STMicroelectr ... /read_data_simple.c