是否可以提供 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 来使用.
请帮我看看代码有没有问题