OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3379|回复: 3

stm103模拟 SPI与ADXL345通信

[复制链接]

11

主题

34

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2016-8-15
在线时间
22 小时
发表于 2016-9-21 16:45:51 | 显示全部楼层 |阅读模式
20金钱
本人使用的是模拟SPI,频率为5M。因为ADXL345最大5M。
int ADXL_ReadWrite()
{
    char    ControlValue = 0x00;
    unsigned    int        iTemp = 0;
    SPI_ADXL_HIGH();
    SET_ADXL_SCK();//a11 1
    Delay_Us(1000);
    int data_out=0;
    uint8_t i = 0;
    SPI_ADXL_LOW();
    Delay_Us(1000);
    CLEAR_ADXL_SCK();
    SET_SDO();//READ 1
    Delay_Us(1000);
    SET_ADXL_SCK();
    Delay_Us(1000);
    ControlValue <<= 1;
   
    CLEAR_ADXL_SCK();
    SET_SDO();//MB 1
    Delay_Us(1000);
    SET_ADXL_SCK();
    Delay_Us(1000);
    ControlValue <<= 1;
   
   
   
    for(i=0;i<6;i++)//0X00
    {
    CLEAR_ADXL_SCK(); //a11 0
        if(0x80 == (ControlValue & 0x80))
          {
            SET_SDO();      //Send one to SDO pin
          }
    else
          {
            CLR_SDO();      //Send zero to SDO pin
          }
        Delay_Us(1000);
    SET_ADXL_SCK();
    Delay_Us(1000);
    ControlValue <<= 1;    //Rotate data
    }
    Delay_Us(1000);
   
  
    for(i=0; i<8; i++)
        {
            CLEAR_ADXL_SCK();
            data_out <<= 1;        //Rotate data
            Delay_Us(1000);
            SET_ADXL_SCK();
            iTemp = GET_ADXL_SDO();            //Read SDI of ADXL345
            if(0x00000020 == (iTemp & 0x00000020))               //SDI  P1.5
            {
                data_out |= 1;   
            }
            Delay_Us(1000);
        }
    //返回读出的数据
    SET_ADXL_SCK();
    Delay_Us(1000);
    SPI_ADXL_HIGH();
    return data_out;  
}
本人想读取他的器件名00,dataout值应为5E。但是接收基本为0,求各位大哥有空看看,指点新手

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

34

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2016-8-15
在线时间
22 小时
 楼主| 发表于 2016-9-21 16:47:06 | 显示全部楼层
GET_ADXL_SDO()是GET_ADXL_SDI()
回复

使用道具 举报

11

主题

34

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2016-8-15
在线时间
22 小时
 楼主| 发表于 2016-9-21 16:52:35 | 显示全部楼层
附上时序图
QQ截图20160921165145.png
回复

使用道具 举报

11

主题

34

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2016-8-15
在线时间
22 小时
 楼主| 发表于 2016-9-21 16:54:26 | 显示全部楼层
夏至硬汉 发表于 2016-9-21 16:47
GET_ADXL_SDO()是GET_ADXL_SDI()

00寄存器地址,5E为寄存器里的值。
GET_ADXL_SDO()与CLR_SDO并非同一个端口
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-25 03:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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