搜索
bottom↓
回复: 4

如何让arm32与adxl345利用spi进行通信?

[复制链接]

出0入0汤圆

发表于 2011-8-5 23:34:49 | 显示全部楼层 |阅读模式
最近在做自动控制的四轴,但是始终不能让stm32与adxl345通过四线spi进行通讯:写入0x00,返回0xE5,cs拉高后延时100ms再拉低,写入0x2C返回的还是0xE5(应该返回00001010),纠结中……不知是否有人同纠结?如果有在st官方固件库下与adxl345通信的例程,希望能够提供给我,小菜鸟感激不尽~
E-mail:wanghuifen987@163.com

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2011-8-17 16:28:25 | 显示全部楼层
你好!不知道怎么了,网上好像没有完整的程序,在EDN论坛上看到一个用IO模拟SPI的程序,结果弄了两天,得出一个结果,和你的一样,0XE5是读出来了,可无论读哪个寄存器都是0xE5!,天哪!帮帮我吧!这是我的程序
/***************SPI write***************    *******/

void write_single_byte(uchar addr,uchar data)
{
  uchar com_addr=0;
  com_addr=addr;
  SET_OUT_MOSI;
  SET_IN_MISO;
  
  SET_CS();
  SET_CLK();
  
  CLR_CS();
  
  for(uchar i=0;i<8;i++)
  {
     CLR_CLK();
     if(0x80==com_addr&0x80)
     {
       MOSI=1;
     }
     else
     {
       MOSI=0;
     }
     
     SET_CLK();
     com_addr=com_addr<<1;
  }
  
  
    // SET_CLK();
      for(uchar i=0;i<8;i++)
  {
     CLR_CLK();
     if(0x80==data&0x80)
     {
       MOSI=1;
     }
     else
     {
       MOSI=0;
     }
     
     SET_CLK();
     data<<=1;
  }
  SET_CS();
}



/***********************************/

void read_multiply_byte(uchar addr,char *buf,uchar rege_count)
{
  uchar byte_count=0;
  uchar com_addr=0;
  char data=0;
  uchar value=0;
  
   SET_OUT_MOSI;        //MOSI设置为输出
   SET_IN_MISO;          //MISO设置为输入
   
  if(rege_count==1)         //判断是不是连续读取
  {
   com_addr=addr|0x80;      //设置读标志  
  }
  else
  {
   com_addr=addr|0xC0;      //设置连续读标志
  }  
  
   // SET_CS();
//   SET_CLK();              

    CLR_CS();                  //SPI起始头
    CLR_CLK();
    for(uchar i=0;i<8;i++)    //写入8位
    {
                 //不知道为什么要先左移
      if(0x80==com_addr&0x80)
      {
        MOSI=1;
      }
      else
      {
        MOSI=0;
      }
      
       SET_CLK();
      value<<=1;
      if(MISO)
         {
           value|=0x01;           
         }
     
       CLR_CLK();
      
      com_addr<<=1;
    }
   

    for(byte_count=0;byte_count<rege_count;byte_count++)
    {
      for(uchar i=0;i<8;i++)
      {
        
         data<<=1;
         if(MISO)
         {
           data|=0x01;
         }
         
         SET_CLK();  
         CLR_CLK();
      }
       buf[byte_count]=data;
      
    }
      SET_CS();   
}

出0入0汤圆

发表于 2011-8-17 17:16:17 | 显示全部楼层
有的人说通信速度太快了,如何放慢!

出0入0汤圆

发表于 2011-9-4 21:15:39 | 显示全部楼层
我也出现了这个问题,不管读什么都是0xE5,请问你解决了没,可否跟我联系fengc234@163.com

出0入0汤圆

发表于 2012-5-12 14:04:03 | 显示全部楼层
我的也是啊啊!!fifo模式会返回E5
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-27 01:06

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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