|
使用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,想知道我的代码部分是否有什么问题?
|
评分
-
查看全部评分
|