AS5047P STM32CubeMX HAL库 调试
- 1. AS5047使用说明
- 1.1 电源连接
- 1.2 SPI数据格式
- 1.3 AS5047P相关寄存器
- 2. STM32CubeMX 配置SPI
- 2.1 两种SPI读取方式
- 参考
1. AS5047使用说明
1.1 电源连接
- 可以选择两种供电方式:3.3V或者5V
1.2 SPI数据格式
1.3 AS5047P相关寄存器
- volatile registers
- Non-Volatile registers
2. STM32CubeMX 配置SPI
这里我使用的是SPI3,具体配置如下:需要注意两点:
- 波特率<10MHz
- CRC 校验必须关闭:因为STM32的SPI使用CRC校验时,会在原始数据后面再发送一帧CRC校验帧。而AS5047P使用最高位CRC奇偶校验,两者是冲突的。如果需要CRC校验,需要自己写相关校验程序。可以参考AS5047p STM32CubeMX SPI HAL库 程序开发
2.1 两种SPI读取方式
- 使用CRC校验
#define ANGLEUNC 0x3FFE //measured angle without dynamic angle error compensation
uint16_t AS5047_read(uint16_t register_add)
{
uint16_t data;
register_add |= 0x4000; //读指令 bit14 置1
if(Parity_bit_Calculate(register_add) == 1)
register_add = register_add | 0x8000; //如果前15位 1的个数位奇数,则Bit15 置1
SPI_ReadWrite_16bit(register_add); //发送一条指令,不管返回的数据
data = SPI_ReadWrite_16bit(NOP | 0x4000); //发送一条空指令,读取上一次指令返回的数据
data &= 0x3FFF;
return data;
}
void main(void)
{
uint16_t rawData = AS5047_read(ANGLEUNC);
}
- 不使用CRC校验
/**
* @brief AS5047P读取原始数据,不使用CRC校验,直接丢弃校验码
* data [15] [14] [13:0]
* CRC 1 read 1 ANGLECOM 3FF measured angle with dynamic angle error compensation
* @retval 返回读取的角度数据
*/
uint16_t AS5047_read_NCRC(void)
{
//直接发送0xFFFF,
return SPI_ReadWrite_16bit(0xFFFF);
}
void main(void)
{
uint16_t rawData = AS5047_read_NCRC();
}
参考
- AS5047p STM32CubeMX SPI HAL库 程序开发