首先声明一点:drv8301和03代码SPI部分一模一样,区别只是01多了几个引脚因此多了几个状态检测。
SPI需要配置成16位SPI,配置代码参考我另一篇AS5048A,SPI一模一样,不需要做任何修改,此SPI初始化完成则可以保证可以正常读写DRV8301/03,需要注意的一点是drv8301/03必须要使能EN_GATE脚SPI才可以正常使用,即,EN_GATE = 1;
u16 spi3readwritebyte(u16 TxData)
{
while (SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE) == RESET){}//µÈ´ý·¢ËÍÇø¿Õ
SPI_I2S_SendData(SPI3, TxData); //ͨ¹ýÍâÉèSPIx·¢ËÍÒ»¸öbyte Êý¾Ý
while (SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_RXNE) == RESET){} //µÈ´ý½ÓÊÕÍêÒ»¸öbyte
return SPI_I2S_ReceiveData(SPI3); //·µ»ØÍ¨¹ýSPIx×î½ü½ÓÊÕµÄÊý¾Ý
}
//u16 spi_drv8303_write(u16 TxData)
//{
// GPIO_ResetBits(GPIOC,GPIO_Pin_13);
// spi3readwritebyte(TxData);
// GPIO_SetBits(GPIOC,GPIO_Pin_13);
// delay_us(10);
//}
uint16_t m0_spi_drv8303_read(uint16_t TxData)
{
uint16_t data;
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
spi3readwritebyte(TxData);
GPIO_SetBits(GPIOC,GPIO_Pin_13);
delay_us(10);
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
data = spi3readwritebyte(TxData);
GPIO_SetBits(GPIOC,GPIO_Pin_13);
return data;
}
//下面为寄存器配置,最下面四行为读取四个寄存器,上面为写寄存器,具体你需要怎么配置根据个人需求进行选择
drv8303_reg_read[0] = (DRV8301_REG2<<11)|GATE_CURRENT_0_7_A|GATE_RESET_NOMAL|PWM_MODE_6_INPUTS|OCP_LATCH_SHUT_DOWN|OC_ADJ_SET_14;
drv8303_reg_read[1] = (DRV8301_REG3<<11)|OCTW_OT_ONLY|GAIN_AMP_80|DC_CAL_CH1_CON|DC_CAL_CH2_CON|OC_TOFF_CYCLE;
m0_spi_drv8303_read(drv8303_reg_read[0]);delay_ms(100);
m0_spi_drv8303_read(drv8303_reg_read[1]);delay_ms(100);
drv8303_reg_read[0] = m0_spi_drv8303_read((DRV8301_REG0<<11)|0x8000);delay_ms(100);
drv8303_reg_read[1] = m0_spi_drv8303_read((DRV8301_REG1<<11)|0x8000);delay_ms(100);
drv8303_reg_read[2] = m0_spi_drv8303_read((DRV8301_REG2<<11)|0x8000);delay_ms(100);
drv8303_reg_read[3] = m0_spi_drv8303_read((DRV8301_REG3<<11)|0x8000);delay_ms(100);
只使用m0_spi_drv8303_read即可以读写
下面链接为drv83的数据手册
https://www.ti.com.cn/cn/lit/ds/symlink/drv8303.pdf?ts=1652255255976&ref_url=https%253A%252F%252Fwww.ti.com.cn%252Fsitesearch%252Fzh-cn%252Fdocs%252Funiversalsearch.tsp%253FlangPref%253Dzh-CN%2526searchTerm%253Ddrv8303%2526nr%253D282
具体需要如何配置可参考,详细内容芯片手册有讲解,按照我那样配置也可以正常使用