是否可以提供W806与DAC8830通信的例程?DAC8830是三线单向SPI。
我用以下代码,通信不成功。
SPI_HandleTypeDef hspi;
void SPI_Init(void)
{
hspi.Instance = SPI;
hspi.Init.Mode = SPI_MODE_MASTER;
hspi.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi.Init.NSS = SPI_NSS_SOFT;
hspi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_20;
hspi.Init.FirstByte = SPI_BIGENDIAN;
if (HAL_SPI_Init(&hspi) != HAL_OK)
{
Error_Handler();
}
}
bool DAC8330_SetDAC(uint16_t value)
{
bool rc;
union U2byte U2B;
U2B.HarfWord = value;
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_18, GPIO_PIN_RESET); // DAC8330 0=片选、1=未片选
vTaskDelay(1);
if (HAL_SPI_Transmit(&hspi, U2B.Bytes, 2, 5000000) == HAL_OK)
{
W806.DAC = value;
rc = true;
} else
rc = false;
vTaskDelay(1);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_18, GPIO_PIN_SET); // DAC8330 0=片选、1=未片选
return rc;
}
void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
{
__HAL_RCC_SPI_CLK_ENABLE();
__HAL_AFIO_REMAP_SPI_CLK(GPIOB, GPIO_PIN_24);
__HAL_AFIO_REMAP_SPI_MOSI(GPIOB, GPIO_PIN_26);
}
void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi)
{
__HAL_RCC_SPI_CLK_DISABLE();
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_24 | GPIO_PIN_26);
}
片选软控制,并不是用任何一个IO来拉高拉低,需要用__HAL_AFIO_REMAP_SPI_CS配置有片选功能的pin脚为cs后,调用__HAL_SPI_SET_CS_LOW、__HAL_SPI_SET_CS_HIGH来使用。
请帮我看看代码有没有问题