是否可以提供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來使用。
請幫我看看代碼有沒有問題