whf199191 发表于 2011-8-5 23:34:49

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

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

zhui_meng 发表于 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=data;
      
    }
      SET_CS();   
}

zhui_meng 发表于 2011-8-17 17:16:17

有的人说通信速度太快了,如何放慢!

fengc234 发表于 2011-9-4 21:15:39

我也出现了这个问题,不管读什么都是0xE5,请问你解决了没,可否跟我联系fengc234@163.com

小笨蛋 发表于 2012-5-12 14:04:03

我的也是啊啊!!fifo模式会返回E5
页: [1]
查看完整版本: 如何让arm32与adxl345利用spi进行通信?