我需要从STM32F4 Discovery中的加速度计LIS3DSH读取一些数据。我有这个主要代码:
uint8_t writeData(uint8_t data) {
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET)
;
SPI_I2S_SendData(SPI1, data);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET)
;
return SPI_I2S_ReceiveData(SPI1);
}
void setReg(uint8_t address, uint8_t value) {
GPIO_ResetBits(GPIOE,GPIO_Pin_3);
writeData(address);
writeData(value);
GPIO_SetBits(GPIOE,GPIO_Pin_3);
}
uint8_t getReg(uint8_t address) {
uint8_t data=0;
address|=(1<<7);
GPIO_ResetBits(GPIOE,GPIO_Pin_3);
writeData(address);
data = writeData(0x00);
GPIO_SetBits(GPIOE,GPIO_Pin_3);
return data;
}
int main(void)
{
char str[4];
usart_init();
spi_init();
// Turn on accelerometer
//setReg(LIS302DL_CTRL_REG1, (1<<PD_CTRL_REG1) );
LIS3DSH_Init();
// Read data from three registers
// and write it to UART
while(1)
{
delay();
itoa((int8_t) LIS3DSH_Get_X_Out(1),&str);
send_str(&str);
send_str(":");
itoa((int8_t) getReg(LIS302DL_OUT_Y),&str);
send_str(&str);
send_str(":");
itoa((int8_t) getReg(LIS302DL_OUT_Z),&str);
send_str(&str);
send_str(" | ");
}
}
但它只收到第一个价值。例如:
5:32:128|5:32:128|5:32:128|5:32:128|5:32:128|5:32:128|5:32:128|5:32:128|5:32:128|5:32:128|
5:32:128|5:32:128|5:32:128|5:32:128|5:32:128|5:32:128|5:32:128|5:32:128|5:32:128|5:32:128|
5:32:128|5:32:128|
我使用USART2来读取这些数据。有人可以说如何实时更新数据吗?例如,如果我翻过电路板,数据会改变吗?
答案 0 :(得分:0)
我们可以在这里开始搜索错误。在你的问题中,有些事情让我感到困惑。
解决方案:尝试使用This lib并抛弃所有get reg并设置reg代码和其他spi_init。
类似的东西:
#include LIS3DSH.h
int main(void)
{
char str[4];
usart_init();
LIS3DSH_Init();
while(1)
{
delay();
itoa((int8_t) LIS3DSH_Get_X_Out(1),&str);
send_str(&str);
send_str(":");
itoa((int8_t) LIS3DSH_Get_Y_Out(1),&str);
send_str(&str);
send_str(":");
itoa((int8_t) LIS3DSH_Get_Z_Out(1),&str);
send_str(&str);
send_str(" | ");
}
}
答案 1 :(得分:0)
我找到了。传感器的电源未打开。它在寄存器设置(0x2)中解决。谢谢大家的帮助。