新手入门
- 积分
- 18
- 金钱
- 18
- 注册时间
- 2017-3-17
- 在线时间
- 2 小时
|
发表于 2017-6-15 17:41:16
|
显示全部楼层
挖个坟:
估计LZ是写原子哥提供的I2C接口版本吧。
如果能读出0xE5,那肯定接线、程序初始化部分和读寄存器部分、时序都没有问题。
最近用SPI做这个,其实和I2C类似,这里仅根据我做的过程中的一些理解,给出一些分析,不一定能解决问题。
1. 确定数据地址写对了:0x32~0x37
2. 注意数据高位和低位:官方文档写的,DATAx0是低8位,DATAx1是高8位,两个组成一个16位补码的short类型。
如果吧DATAx0放高位,DATXx1放低位,那就是错的,就会发生过千的数据情况。
看到LZ有负数情况,估计补码是没问题的。
这里以SPI读X轴的数据为例:
首先读取0x33的数据,然后左移8位,再读取0x32的数据,或操作:
[mw_shl_code=c,true] u8 temp;
short *x;
temp=SPI1_ReadWriteByte(0x33|0x80);
*x = SPI1_ReadWriteByte(0x00);
temp = SPI1_ReadWriteByte(0x32|0x80);
*x = ((*x)<<8)|SPI1_ReadWriteByte(0x00);[/mw_shl_code]
(省略掉一些细节)
希望给大家带来帮助 |
|