请选择 进入手机版 | 继续访问电脑版
搜索
热搜:
查看: 435|回复: 3

[求助] as5047u的SPI通信问题

[复制链接]

1

主题

2

帖子

93

积分

注册会员

Rank: 2

积分
93
发表于 2019-10-26 18:49:29 | 显示全部楼层 |阅读模式
使用STM32试图读取AS5047U的角度数据,但是一直没有办法读取到数据。下面是我的部分代码:

u16 SPI_Read(u16 ADDR)                                        //读取某一个寄存器的值
{
        u16 data = 0;
        u16 CRC_Con = 0;
        u16 Command = 0;
        u8 crc = 0;
                       
        Command = SPI_Command_Pack(ADDR,READ);                                                                //根据输入的地址以及操作类型生成Command
        CRC_Con = Command;
        //CRC_Con |= ((Command & 0xFF) << 8) & 0xFFFF;                                                //将Command颠倒
        //CRC_Con |= (u8)((Command & 0xFF00) >> 8);
        crc = CRC8((u8 *)&CRC_Con,2);                                                                                //计算CRC值
       
        CS = 0;                                                                                                                                //拉低CS引脚
       
        data |= SPI1_ReadWriteByte((u8)((Command >> 8) & 0xFF)) << 8;
        delay_us(5);
        data |= SPI1_ReadWriteByte((u8)(Command & 0xFF));
        delay_us(5);
        SPI1_ReadWriteByte(crc);
        delay_us(5);
       
        CS = 1;
       
        delay_us(10);
       
        Command = SPI_Command_Pack(0x0000,READ);
        CRC_Con = Command;
//        CRC_Con |= ((Command & 0xFF) << 8) & 0xFFFF;
//        CRC_Con |= (u8)((Command & 0xFF00) >> 8);
        crc = CRC8((u8 *)&CRC_Con,2);
       
        CS = 0;
       
        data |= SPI1_ReadWriteByte((u8)((Command >> 8) & 0xFF)) << 8;
        delay_us(5);
        data |= SPI1_ReadWriteByte((u8)(Command & 0xFF));
        delay_us(5);
        SPI1_ReadWriteByte(crc);
        delay_us(5);
       
        CS = 1;
       
        delay_ms(10);
       
        delay_us(10);
       
        return data;
}



u8 CRC8(u8 *u8_data,u8 u8_len)
{
        u8 i, j;
        u8 u8_crc8;
        u8 u8_poly;

        u8_crc8 = 0xFF;                                                                        //传说中的初始值……?
        u8_poly = 0x1D;


        for (i = 0; i < u8_len; i++)
        {
                u8_crc8 ^= u8_data[i];
                for (j = 0; j < 8; j++)
                {
                        if (u8_crc8 & 0x80)
                        {
                        u8_crc8 = (u8_crc8 << 1) ^ u8_poly;
                        }
                        else
                        {
                        u8_crc8 <<= 1;
                        }
                }
        }


        u8_crc8 ^= (u8)0xFF;
        return u8_crc8;
}


u16 SPI_Command_Pack(u16 ADDR, u8 Type)
{
        u16 Command = 0;
       
        /*开始包含地址信息*/
        ADDR &= 0X3FFF;                                                //地址取其后14位
        Command |= ADDR;
        /*地址信息输入完毕*/
       
        if(Type == READ)
        {
                Command |= 0X4000;
        }
        else
        {
                Command |= 0X0000;
        }
       
        return Command;
}


但是完全无法读取到数据,返回的前16位不是0xc000就是0x4000,0x8000,想知道我的代码部分是否有什么问题?

评分

参与人数 1ams金币 +15 收起 理由
ams社区管理员 + 15 赞一个!

查看全部评分

回复

使用道具 举报

20

主题

831

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
17137
发表于 2019-11-1 14:44:38 | 显示全部楼层
检查一下你的SPI设置,clk初始低电平0,第2边沿,MSB在前LSB在后。
回复 支持 反对

使用道具 举报

1

主题

2

帖子

93

积分

注册会员

Rank: 2

积分
93
 楼主| 发表于 2019-11-1 20:00:26 | 显示全部楼层
流水源 发表于 2019-11-1 14:44
检查一下你的SPI设置,clk初始低电平0,第2边沿,MSB在前LSB在后。

嗯,但是已经确认过了,SPI的设置没有问题。P系列的我已经建立通讯了唯独U系列不行。
回复 支持 反对

使用道具 举报

0

主题

1

帖子

27

积分

新手上路

Rank: 1

积分
27
发表于 2020-5-6 12:43:17 | 显示全部楼层
ronaldo79 发表于 2019-11-1 20:00
嗯,但是已经确认过了,SPI的设置没有问题。P系列的我已经建立通讯了唯独U系列不行。 ...

楼主您好,最近我用stm32的SPI读取AS5047P的数据。发送正常,但是收不到数据,请问您有遇到这个问题吗
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|ams社区

GMT+8, 2020-8-4 10:10 , Processed in 0.069563 second(s), 19 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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