LIS3DH为三轴向高精度数字式加速度传感器,可以通过IIC,SPI方式直接采集加速度数据。这里使用的是模拟SPI。 1.初始化配置 采集数据之前需要对有关寄存器进行必要的配置: write_reg(0x23, 0x08, GPIOA, GPIO_Pin_3); //0x48大端 0x08小端
write_reg(0x20, 0x57, GPIOA, GPIO_Pin_3); //100HZ采样,电源正常模式,三个轴采样使能 这里GPIOA, GPIO_Pin_3是片选CS脚 2.读写寄存器 u8 read_reg(u8 register_name, GPIO_TypeDef* GPIOCS, uint16_t GPIO_Pin_CS, GPIO_TypeDef* GPIOSDO, uint16_t GPIO_Pin_SDO)
{
u8 value,i;
u8 nMISO=0;
value=0;
register_name |= 0x80; // D7=1 -> read; D6=0 -> single byte
GPIOCS->BRR=GPIO_Pin_CS;//CSN_L;
delayus(8);
for (i=0;i<8;i++) // address
{
if (register_name & 0x80)
GPIOB->BSRR=GPIO_Pin_9;//MOSI_H;
else
GPIOB->BRR=GPIO_Pin_9;//MOSI_L;
register_name <<= 1;
clk();
}
for (i=0;i<8;i++) // read data
{
clk();
in_byte <<= 1;
nMISO = ((GPIOSDO->IDR & GPIO_Pin_SDO)!=0)?1:0;
value|= nMISO;
}
GPIOCS->BSRR=GPIO_Pin_CS;//CSN_H;
return value;
} void write_reg(u8 register_name, u8 register_value, GPIO_TypeDef* GPIOCS, uint16_t GPIO_Pin_CS)
{
u8 i;
register_name &= 0x3f; // D7=0 -> write; D6=0 -> single byte
GPIOCS->BRR=GPIO_Pin_CS;//CSN_L;
delayus(8);
for (i=0;i<8;i++) // address
{
if (register_name & 0x80)
GPIOB->BSRR=GPIO_Pin_9;//MOSI_H;
else
GPIOB->BRR=GPIO_Pin_9;//MOSI_L;
register_name <<= 1;
clk();
}
for (i=0;i<8;i++) // write data
{
if (register_value & 0x80)
GPIOB->BSRR=GPIO_Pin_9;//MOSI_H;
else
GPIOB->BRR=GPIO_Pin_9;//MOSI_L;
register_value <<= 1;
clk();
}
GPIOCS->BSRR=GPIO_Pin_CS;//CSN_H;
} 3.读加速度传感器数据 LIS3DH有6个加速度数据寄存器
读取数据时可以挨个读取寄存器也可以根据SPI 时序连续读取。
|