使用ad5292菊花链模式出现点问题。通过spi发送数据,ad5292的阻值没有变化。spi 配置如下
void MX_SPI4_Init(void)
{
/* USER CODE BEGIN SPI4_Init 0 */
/* USER CODE END SPI4_Init 0 */
/* USER CODE BEGIN SPI4_Init 1 */
/* USER CODE END SPI4_Init 1 */
hspi4.Instance = SPI4;
hspi4.Init.Mode = SPI_MODE_MASTER;
hspi4.Init.Direction = SPI_DIRECTION_2LINES;
hspi4.Init.DataSize = SPI_DATASIZE_16BIT;
hspi4.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi4.Init.CLKPhase = SPI_PHASE_2EDGE;
hspi4.Init.NSS = SPI_NSS_SOFT;
hspi4.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
hspi4.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi4.Init.TIMode = SPI_TIMODE_DISABLE;
hspi4.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi4.Init.CRCPolynomial = 0x0;
hspi4.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
hspi4.Init.NSSPolarity = SPI_NSS_POLARITY_LOW;
hspi4.Init.FifoThreshold = SPI_FIFO_THRESHOLD_01DATA;
hspi4.Init.TxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
hspi4.Init.RxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
hspi4.Init.MasterSSIdleness = SPI_MASTER_SS_IDLENESS_00CYCLE;
hspi4.Init.MasterInterDataIdleness = SPI_MASTER_INTERDATA_IDLENESS_00CYCLE;
hspi4.Init.MasterReceiverAutoSusp = SPI_MASTER_RX_AUTOSUSP_DISABLE;
hspi4.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_DISABLE;
hspi4.Init.IOSwap = SPI_IO_SWAP_DISABLE;
if (HAL_SPI_Init(&hspi4) != HAL_OK)
{
Error_Handler();
}
void AD5292_SPI4_SetResistance(uint16_t value, uint8_t num_devices) {
// 检查阻值范围
value = (value > 1023) ? 1023 : value;
// 构造RDAC写命令
uint16_t tx_value = AD5292_WRITE_CMD | (value & 0x03FF);
// 构造发送数据
uint16_t tx_data_zz[8] = {0};
for (int i = 0; i < num_devices; i++) {
tx_data_zz[num_devices - 1 - i] = tx_value;
}
// 发送阻值设置命令
HAL_GPIO_WritePin(AD5292_SPI4_NSS_PORT, AD5292_SPI4_NSS_PIN, GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi4, (uint8_t*)tx_data_zz, num_devices, 100);
HAL_GPIO_WritePin(AD5292_SPI4_NSS_PORT, AD5292_SPI4_NSS_PIN, GPIO_PIN_SET);
}
初始化 ad5292发送的 0x1802 ,在写入阻值前,在发送0x1803 然后写入阻值。 写入代码如上。但是阻值始终没有变化,求各位给看看,到底是哪里出了问题,使用示波器测量,时钟数据都正确。再也要求范围内