amoBBS 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
12
返回列表 发新帖
楼主: john800422

STM32F103 硬件I2C ADXL345 L3G4200 LSM303 调试成功

  [复制链接]
发表于 2013-8-16 20:38:08 | 显示全部楼层
怎么打开后很多乱码的呢?
 楼主| 发表于 2013-8-16 22:14:59 | 显示全部楼层
ha303514587 发表于 2013-8-16 20:38
怎么打开后很多乱码的呢?

繁體的
自己轉下就好了
发表于 2013-9-4 15:25:07 来自手机 | 显示全部楼层
留名啀用谢谢楼主
发表于 2013-9-4 17:10:42 | 显示全部楼层
马克火速留名
发表于 2013-9-6 21:26:32 | 显示全部楼层
正在研究硬件IIC
发表于 2013-9-22 21:35:23 | 显示全部楼层
请教下楼主ADXL345_I2C_ADDR是如何确定的啊
 楼主| 发表于 2013-9-23 00:04:38 | 显示全部楼层
cjwmusic 发表于 2013-9-22 21:35
请教下楼主ADXL345_I2C_ADDR是如何确定的啊

看 Datasheet 的
发表于 2013-9-23 22:43:32 | 显示全部楼层
以后会用到先标记拉
发表于 2013-10-24 12:01:01 | 显示全部楼层
楼主在吗
发表于 2013-10-24 12:03:15 | 显示全部楼层
LSM303  低8位 3轴加速计正常
但是高8位却是乱码
为什么呢? 静止不懂的时候 高8位应该是零才对吧  
因为是16位的  高8位有数据的话 左移8位的时候 数值变得很大了
有没有出现这情况的?
 楼主| 发表于 2013-10-24 12:49:14 | 显示全部楼层
本帖最后由 john800422 于 2013-10-24 12:54 编辑
nds_shenzhen 发表于 2013-10-24 12:03
LSM303  低8位 3轴加速计正常
但是高8位却是乱码
为什么呢? 静止不懂的时候 高8位应该是零才对吧  

  1. u8 Read_A_HL[6] = {0};
  2. s16 Read_A[3] = {0};

  3. Read_A_HL[0] = OUT_X_L_A (28h)
  4. Read_A_HL[1] = OUT_X_H_A (29h)
  5. Read_A_HL[2] = OUT_Y_L_A (2Ah)
  6. Read_A_HL[3] = OUT_Y_H_A (2Bh)
  7. Read_A_HL[4] = OUT_Z_L_A (2Ch)
  8. Read_A_HL[5] = OUT_Z_H_A (2Dh)

  9. Read_A[0] = (s16)((Read_A[1] << 8) | Read_A[0]);
  10. Read_A[1] = (s16)((Read_A[3] << 8) | Read_A[2]);
  11. Read_A[2] = (s16)((Read_A[5] << 8) | Read_A[4]);
复制代码
連續讀取的話,先讀出來的是低 8 寄存器
不知道是否是這個原因?
发表于 2013-10-24 13:39:30 | 显示全部楼层
john800422 发表于 2013-10-24 12:49
連續讀取的話,先讀出來的是低 8 寄存器
不知道是否是這個原因?

我的也是一样的
你帮我看看 是什么情况

LSM303  低8位 3轴加速计正常
但是高8位却是乱码
为什么呢? 静止不懂的时候 高8位应该是零才对吧  
因为是16位的  高8位有数据的话 左移8位的时候 数值变得很大了
有没有出现这情况的?

  1. void LSM303A_Init( void )
  2. {
  3.       
  4.         Single_Write(LSM303A_I2C_ADDR,LSM303A_CTRL_REG1,0x27);
  5.         delay_ms(5);
  6.         Single_Write(LSM303A_I2C_ADDR,LSM303A_CTRL_REG4,0x40);
  7.         delay_ms(5);
  8.         temp=Single_Read(LSM303A_I2C_ADDR,LSM303A_CTRL_REG1);      
  9.         printf("DS: %2x\n",temp);
  10. }

  11. 初始化 返回寄存器设置是正确的。

  12. void LSM303A_Read_Multiple_printf(void)
  13. {
  14.          unsigned char ACC_Data[6];
  15.          int Ax = 0;
  16.          int Ay = 0;
  17.          int Az = 0;
  18.       
  19.     ACC_Data[0]=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_X_L);
  20.     ACC_Data[1]=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_X_H);   
  21.     ACC_Data[2]=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_Y_L);
  22.     ACC_Data[3]=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_Y_H);
  23.     ACC_Data[4]=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_Z_L);
  24.     ACC_Data[5]=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_Z_H);   

  25. //    Ax = (int) ((ACC_Data[1]&0x0F) << 8) + ACC_Data[0];                       
  26. //    Ay = (int) ((ACC_Data[3]&0x0F) << 8) + ACC_Data[2];               
  27. //    Az = (int) ((ACC_Data[5]&0x0F) << 8) + ACC_Data[4];               
  28.                
  29.     Ax =   ACC_Data[1];                       
  30.     Ay =   ACC_Data[3];               
  31.     Az =   ACC_Data[5];      
  32.     printf("LSM:Ax: %d,Ay: %d,Az: %d\n",Ax,Ay,Az);
  33. }

  34. 静止状态下 打印信息 很乱
  35. LSM:Ax: 192,Ay: 16,Az: 112
  36. LSM:Ax: 128,Ay: 64,Az: 64
  37. LSM:Ax: 224,Ay: 240,Az: 176
  38. LSM:Ax: 160,Ay: 0,Az: 48
  39. LSM:Ax: 160,Ay: 176,Az: 176
  40. LSM:Ax: 144,Ay: 0,Az: 16
  41. LSM:Ax: 192,Ay: 0,Az: 128
  42. LSM:Ax: 144,Ay: 16,Az: 80
  43. LSM:Ax: 176,Ay: 16,Az: 224
  44. LSM:Ax: 224,Ay: 32,Az: 0
  45. LSM:Ax: 96,Ay: 144,Az: 208
  46. LSM:Ax: 160,Ay: 208,Az: 48
  47. LSM:Ax: 0,Ay: 160,Az: 112
  48. LSM:Ax: 64,Ay: 224,Az: 96
  49. LSM:Ax: 208,Ay: 240,Az: 160
  50. LSM:Ax: 32,Ay: 224,Az: 160
  51. LSM:Ax: 224,Ay: 208,Az: 208
  52. LSM:Ax: 96,Ay: 208,Az: 112
  53. LSM:Ax: 0,Ay: 160,Az: 80
  54. LSM:Ax: 48,Ay: 32,Az: 208
  55. LSM:Ax: 96,Ay: 160,Az: 112
  56. LSM:Ax: 48,Ay: 32,Az: 192
  57. LSM:Ax: 64,Ay: 160,Az: 0
  58. LSM:Ax: 64,Ay: 32,Az: 144
  59. LSM:Ax: 80,Ay: 176,Az: 192

  60. 同样一个读取函数
  61. void LSM303A_Read_Multiple_printf(void)
  62. {
  63.          unsigned char ACC_Data[6];
  64.          int Ax = 0;
  65.          int Ay = 0;
  66.          int Az = 0;
  67.       
  68.     ACC_Data[0]=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_X_L);
  69.     ACC_Data[1]=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_X_H);   
  70.     ACC_Data[2]=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_Y_L);
  71.     ACC_Data[3]=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_Y_H);
  72.     ACC_Data[4]=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_Z_L);
  73.     ACC_Data[5]=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_Z_H);   

  74. //    Ax = (int) ((ACC_Data[1]&0x0F) << 8) + ACC_Data[0];                       
  75. //    Ay = (int) ((ACC_Data[3]&0x0F) << 8) + ACC_Data[2];               
  76. //    Az = (int) ((ACC_Data[5]&0x0F) << 8) + ACC_Data[4];               
  77.                
  78.     Ax =   ACC_Data[0];                       
  79.     Ay =   ACC_Data[2];               
  80.     Az =   ACC_Data[4];      
  81.     printf("LSM:Ax: %d,Ay: %d,Az: %d\n",Ax,Ay,Az);
  82. }

  83. 静止状态下  打印信息很正确
  84. LSM:Ax: 5,Ay: 2,Az: 67
  85. LSM:Ax: 4,Ay: 2,Az: 66
  86. LSM:Ax: 4,Ay: 3,Az: 66
  87. LSM:Ax: 4,Ay: 3,Az: 66
  88. LSM:Ax: 4,Ay: 3,Az: 65
  89. LSM:Ax: 4,Ay: 3,Az: 66
  90. LSM:Ax: 4,Ay: 3,Az: 66
  91. LSM:Ax: 5,Ay: 2,Az: 66
  92. LSM:Ax: 4,Ay: 2,Az: 67
  93. LSM:Ax: 6,Ay: 2,Az: 66
  94. LSM:Ax: 4,Ay: 2,Az: 66
  95. LSM:Ax: 4,Ay: 2,Az: 67
  96. LSM:Ax: 4,Ay: 3,Az: 67
  97. LSM:Ax: 5,Ay: 3,Az: 66
  98. LSM:Ax: 5,Ay: 3,Az: 67
  99. LSM:Ax: 5,Ay: 2,Az: 66
  100. LSM:Ax: 4,Ay: 3,Az: 68
  101. LSM:Ax: 5,Ay: 3,Az: 66
  102. LSM:Ax: 4,Ay: 2,Az: 65
  103. LSM:Ax: 4,Ay: 2,Az: 66
  104. LSM:Ax: 4,Ay: 2,Az: 65
  105. LSM:Ax: 4,Ay: 2,Az: 66
  106. LSM:Ax: 5,Ay: 2,Az: 66
复制代码
发表于 2013-10-24 13:43:02 | 显示全部楼层
你出现过这样的情况吗  如果是高8位 移位和低8位 相加的话 那就变化很大了
 楼主| 发表于 2013-10-24 14:41:34 | 显示全部楼层
本帖最后由 john800422 于 2013-10-24 14:43 编辑
nds_shenzhen 发表于 2013-10-24 13:43
你出现过这样的情况吗  如果是高8位 移位和低8位 相加的话 那就变化很大了


試試看這樣吧

  1. void LSM303A_Read_Multiple_printf(void)
  2. {
  3.     unsigned char ACC_Data[6] = {0};
  4.     int Ax = 0;
  5.     int Ay = 0;
  6.     int Az = 0;

  7.     ACC_Data[0] = Single_Read(LSM303A_I2C_ADDR, LSM303A_OUT_X_L);
  8.     ACC_Data[1] = Single_Read(LSM303A_I2C_ADDR, LSM303A_OUT_X_H);
  9.     ACC_Data[2] = Single_Read(LSM303A_I2C_ADDR, LSM303A_OUT_Y_L);
  10.     ACC_Data[3] = Single_Read(LSM303A_I2C_ADDR, LSM303A_OUT_Y_H);
  11.     ACC_Data[4] = Single_Read(LSM303A_I2C_ADDR, LSM303A_OUT_Z_L);
  12.     ACC_Data[5] = Single_Read(LSM303A_I2C_ADDR, LSM303A_OUT_Z_H);

  13.     Ax = (int)((ACC_Data[1] << 8) | ACC_Data[0]);
  14.     Ay = (int)((ACC_Data[3] << 8) | ACC_Data[2]);
  15.     Az = (int)((ACC_Data[5] << 8) | ACC_Data[4]);

  16. //    Ax = ACC_Data[1];
  17. //    Ay = ACC_Data[3];
  18. //    Az = ACC_Data[5];

  19.     printf("ReadAcc: Ax: %d, Ay: %d, Az: %d\n", Ax, Ay, Az);
  20. }
复制代码
发表于 2013-10-24 15:16:39 | 显示全部楼层
john800422 发表于 2013-10-24 14:41
試試看這樣吧

    Ax = (int)((ACC_Data[1] << 8) | ACC_Data[0]);
    Ay = (int)((ACC_Data[3] << 8) | ACC_Data[2]);
    Az = (int)((ACC_Data[5] << 8) | ACC_Data[4]);

得到的结果如下
LSM:Ax: 49407,Ay: 28672,Az: 49218
LSM:Ax: 45311,Ay: 1,Az: 61506
LSM:Ax: 41215,Ay: 40960,Az: 49218
LSM:Ax: 0,Ay: 36864,Az: 20547
LSM:Ax: 24831,Ay: 1,Az: 49219
LSM:Ax: 45310,Ay: 8193,Az: 53314
LSM:Ax: 61695,Ay: 20481,Az: 53314
LSM:Ax: 37119,Ay: 40961,Az: 16451
LSM:Ax: 33023,Ay: 40960,Az: 61506
LSM:Ax: 49406,Ay: 12289,Az: 8259
LSM:Ax: 16639,Ay: 32769,Az: 16451
LSM:Ax: 45311,Ay: 4097,Az: 24643
LSM:Ax: 4351,Ay: 57344,Az: 20547
LSM:Ax: 24831,Ay: 4097,Az: 20547
LSM:Ax: 28927,Ay: 16385,Az: 12354
LSM:Ax: 37119,Ay: 36864,Az: 66
LSM:Ax: 61695,Ay: 24577,Az: 16451
LSM:Ax: 16384,Ay: 49152,Az: 24642
LSM:Ax: 16639,Ay: 20481,Az: 61506
LSM:Ax: 4096,Ay: 4097,Az: 16451
LSM:Ax: 57598,Ay: 53248,Az: 61507
LSM:Ax: 37119,Ay: 1,Az: 4163
LSM:Ax: 37119,Ay: 49152,Az: 32834
LSM:Ax: 28927,Ay: 36864,Az: 53314
LSM:Ax: 61695,Ay: 12288,Az: 53314
LSM:Ax: 24831,Ay: 40961,Az: 67
LSM:Ax: 33023,Ay: 32769,Az: 57410
LSM:Ax: 45311,Ay: 49152,Az: 32835
LSM:Ax: 57599,Ay: 12289,Az: 12355
LSM:Ax: 33023,Ay: 49152,Az: 4163
LSM:Ax: 20735,Ay: 12289,Az: 53314
LSM:Ax: 12543,Ay: 4097,Az: 67
LSM:Ax: 24831,Ay: 1,Az: 20546
LSM:Ax: 37118,Ay: 4097,Az: 32835
LSM:Ax: 33023,Ay: 61440,Az: 28738
LSM:Ax: 45311,Ay: 32769,Az: 12355
LSM:Ax: 53503,Ay: 45057,Az: 57410
LSM:Ax: 61695,Ay: 32769,Az: 32834
LSM:Ax: 45310,Ay: 53248,Az: 12355
LSM:Ax: 16384,Ay: 4097,Az: 24643
LSM:Ax: 61695,Ay: 24576,Az: 45122
LSM:Ax: 61694,Ay: 4097,Az: 41027
LSM:Ax: 49407,Ay: 40960,Az: 16450
LSM:Ax: 0,Ay: 20481,Az: 57410
LSM:Ax: 16639,Ay: 36864,Az: 20548
LSM:Ax: 28927,Ay: 57344,Az: 20547
LSM:Ax: 41215,Ay: 28672,Az: 24642
LSM:Ax: 4351,Ay: 24576,Az: 4163

很奇怪的。。。
发表于 2013-11-8 18:20:55 | 显示全部楼层
恩恩。
发表于 2013-12-5 15:54:43 | 显示全部楼层
楼主   我也是刚开始做四轴想用IIC+DMA   _Read_Multiple这个是什么意思,每个器件头文件里面都有  小弟新手
发表于 2013-12-5 23:03:24 | 显示全部楼层
我想问,这个代码硬件iic加dma用着稳定吗?iic还挂载了多个器件,我硬件iic总是跑飞
发表于 2013-12-6 10:09:32 | 显示全部楼层
楼主,能够正常初始化,但是却读不到设备的ID,ID总是0,这是为什么呀?
发表于 2013-12-13 18:06:30 | 显示全部楼层
膜拜一下大神的杰作
发表于 2013-12-17 15:39:08 | 显示全部楼层
太好了~
发表于 2013-12-18 12:59:54 | 显示全部楼层
顶一个啊
发表于 2014-10-4 18:50:48 | 显示全部楼层
谢谢分享,下载留名~
发表于 2014-10-4 20:41:33 | 显示全部楼层
mark。         
发表于 2014-10-18 21:07:58 | 显示全部楼层
john800422 发表于 2012-8-27 22:01
已经可以了

谢谢~

谢谢分享!
发表于 2015-3-8 23:04:27 | 显示全部楼层
mark一下子啊~!有空也想做四轴
发表于 2015-5-17 15:24:55 | 显示全部楼层
很有用,收藏了
发表于 2015-5-17 16:34:38 | 显示全部楼层
楼主问一下这个函数作用是什么?
  1. void I2C1_Recv_DMA_IRQ( void )
  2. {
  3.         if(DMA_GetFlagStatus(DMA1_FLAG_TC7)) {
  4.                 if(I2C1->SR2 & 0x01) {
  5.                         I2C_DMACmd(I2C1, DISABLE);
  6.                         I2C_GenerateSTOP(I2C1, ENABLE);
  7.                         PV_flag_1 = 0;
  8.                 }
  9.                 DMA_ClearFlag(DMA1_FLAG_TC7);
  10.         }
  11.         if(DMA_GetFlagStatus(DMA1_FLAG_GL7))
  12.                 DMA_ClearFlag(DMA1_FLAG_GL7);
  13.         if(DMA_GetFlagStatus(DMA1_FLAG_HT7))
  14.                 DMA_ClearFlag(DMA1_FLAG_HT7);
  15. }
复制代码
发表于 2015-5-17 16:51:48 | 显示全部楼层
我是冲着硬件IIC来的,希望楼主给力
头像被屏蔽
发表于 2015-7-31 12:03:52 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2015-7-31 23:08:18 | 显示全部楼层
LZ有没有做数据融合?
发表于 2018-6-6 11:53:24 | 显示全部楼层
谢谢分析!学习下LSM303.
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|阿莫电子论坛(原ourAVR/ourDEV) ( 工信部备案:粤ICP备09047143号 公安备案:44190002001997(交互式论坛) )

GMT+8, 2018-6-23 14:41

阿莫电子论坛, 原"中国电子开发网"

© 2004-2018 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表