我使用的是 DRV8350SRTVT 芯片、它与 STM32H7IGT6 MCU 连接。 STM MCU 是主器件、闸极驱动器是从器件。
栅极驱动器中的配置寄存器必须使用 SPI 通信协议进行设置。 下面随附了此工具的代码和设置。
我可以使用 SPI 读取配置寄存器(能够看到默认值)、但无法写入或修改寄存器。
我还将栅极驱动 HS 中的 LOCK 位设置为011 (已解锁、因此我可以修改 SPI 寄存器)。 栅极驱动器已启用。
在 SPI 通信中没有收到任何故障/错误。
SCLK 最小周期= 0.1s
SPI 速度: 537.109 Kbit/s ⇒传输时间1位= 1.86s (在示波器上验证了值)
1) 1)写入 OCP 寄存器
默认值- 00101101101
要写入的值- 00100100000
Rx 缓冲区中按预期接收的值(修改前的值)
2) 2)在写入修改后的值之后读取 OCP 寄存器
无法写入寄存器的值-不存在 SPI 错误、但无法修改寄存器
当我执行读取操作时、仍然返回默认值。

3) 3)读取栅极驱动器 HS 寄存器(用于检查 SPI 寄存器位是否锁定)

数据位的 MSB - 011 (未锁定 SPI 寄存器)
代码
//SPI6栅极驱动器的参数设置
hspi6.instance = SPI6;
hspi6.Init.Mode = SPI_MODE_MASTER;
hspi6.Init.Direction = SPI_DIRECTION_2LINES;
hspi6.Init.DataSize = SPI_DATASIZE_16BIT;
hspi6.Init.CLKPolarity = SPI_POLICY_LOW;
hspi6.Init.CLKPhase = SPI_PHASE_2EDGE;
hspi6.Init.nss = SPI_NSS_soft;
hspi6.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
hspi6.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi6.Init.TIMode = SPI_TIMODE_DISABLE;
hspi6.Init.CRCCalrup = SPI_CRCCALCULATION_DISABLE;
hspi6.Init.CRCPolynomial = 0x0;
hspi6.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
hspi6.Init.NSSPolarity = SPI_NSS_POLICY_LOW;
hspi6.Init.FifoThreshold = SPI_FIFO_THRESHOLD_01DATA;
hspi6.Init.TxCRCInitializationPattern = SPI_CRC_initialization_all_zero_pattern;
hspi6.Init.RxCRCInitializationPattern = SPI_CRC_initialization_all_zero_pattern;
hspi6.Init.MasterSSIdleness = SPI_MASTER_SS_idlene_00CYCLE;
hspi6.Init.MasterInterDataIdleness = SPI_MASTER_INTERDATA_idlene_00CYCLE;
hspi6.Init.MasterReceiverAutoSusp = SPI_MASTER_RX_AUTOSUSP_DISABLE;
hspi6.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_DISABLE;
hspi6.Init.IOSwap = SPI_IO_SWAP_DISABLE;
#define GATEDRIVER_CSA_CONTROL_REGISTER_ADDRESS 0x6
void access_gate_driver_register{
/*启用栅极驱动器-将 GPIO 引脚设置为高电平*/
HAL_GPIO_WritePin (GPIOE、GPIO_PIN_2、GPIO_PIN_SET);
HAL_GPIO_WritePin (GPIOE、GPIO_PIN_3、GPIO_PIN_SET);
HAL_DELAY (1);
uint16_t 命令 word_read =(0x8000 |(reg_address << 11));
uint16_t 命令 word_write =((reg_address << 11)| data_bits);
如果(READ_OR_WRITE_BIT == GATEDRIVER_READ)
{
SPI_TX_BUFFER_GATE_DRIVER =命令字读取;
}
如果(READ_OR_WRITE_BIT == GATEDRIVER_WRITE)、则否则为
{
SPI_TX_BUFFER_Gate_driver =命令字写;
}
HAL_GPIO_WritePin (nss_port_gate_driver[hjoin->id]、nss_pin_gate_driver[hjoin->id]、GPIO_PIN_reset);
if (HAL_SPI_TransmitReceive (&hspi6、(uint8_t*)&SPI_TX_BUFFER_GATE_DRIVER、(uint8_t*)&SPI_Rx_BUFFER_GATE_DRIVER、1、HAL_TIMEOUT)!= HAL_OK)
{
GATE_DRIVER_SPI_ERROR++;
}
HAL_GPIO_WritePin (nss_port_gate_driver[hjoin->id]、nss_pin_gate_driver[hjoin->id]、GPIO_PIN_set);
}
ASYSTR_WRITE_Gate_DRIVER_REGISTER (hjoint、GATEDRIVER_OCP_CONTROL_REGISTER_ADDRESS、0b00100100000);
HAL_DELAY (1);
ASYSTR_READ_Gate_DRIVER_REGISTER (hjoint、GATEDRIVER_GATEDRIVER_HS_REGISTER_ADDRESS);