参考了一些资料,http://blog.sina.com.cn/s/blog_6754612e0101ag39.html还有http://www.amobbs.com/thread-4974726-1-1.html的那个文档,文档里说只能一个一个寄存器读
今天测试发现,是可以连续读的,只是需要处理一下得到数据的结构,第一次收到的是X轴低位数据,如0x0011,第二次就会收到X轴高位数据和Y轴低位数据的组合,比如0x2233,其中22是x轴的,33是Y轴的,第三次就会收到Y轴高位数据和Z轴低位数据的组合,比如0x4455,其中44是Y轴的,55是Z轴的。。。。
我选的GPIOB的1脚做片选引脚,原来的读是
uint8_t read_byte(u8 add)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_1);
SPI_I2S_SendData(SPI1,(add|0x80)<<8|0x00);
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)==RESET);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE)==RESET);
GPIO_SetBits(GPIOB,GPIO_Pin_1);
return SPI_I2S_ReceiveData(SPI1)&0xff;
}
改为
void read_byte(u8 add,uint16_t temp[2])
{
GPIO_ResetBits(GPIOB,GPIO_Pin_1);
SPI_I2S_SendData(SPI1,(add|0xC0)<<8|0x00);
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)==RESET);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE)==RESET);
temp[0] = SPI_I2S_ReceiveData(SPI1)&0xff;
SPI_I2S_SendData(SPI1,0x0000);
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)==RESET);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE)==RESET);
temp[1] = SPI_I2S_ReceiveData(SPI1);
//如果字节多的话,这儿可以继续加
GPIO_SetBits(GPIOB,GPIO_Pin_1);
}
不对的地方请指教
|