是否可以提供W806與DAC8330通信的例程?DAC8330是三線單向SPI。

發布於 2022-07-07 10:52:51

是否可以提供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);

}

查看更多

關注者
0
被浏覽
2k
3 個回答
ZYQ
ZYQ 2022-07-07
我已不再支持W80X任何相關問題的回複,請大家不要私信,有問題找 isme 謝謝

也很想提供啊,可是暫時我沒有DAC8330 啊

abcd
abcd 認證專家 2022-07-07
我只是個路過的老年人~

片選軟控制,並不是用任何一個IO來拉高拉低,需要用__HAL_AFIO_REMAP_SPI_CS配置有片選功能的pin腳為cs後,調用__HAL_SPI_SET_CS_LOW、__HAL_SPI_SET_CS_HIGH來使用。

138****2917
138****2917 2022-07-07
這家夥很懶,什麼也沒寫!

那我改成PB4可以嗎? 就用三條線:

__HAL_AFIO_REMAP_SPI_CS(GPIOB, GPIO_PIN_4);
__HAL_AFIO_REMAP_SPI_CLK(GPIOB, GPIO_PIN_24);
__HAL_AFIO_REMAP_SPI_MOSI(GPIOB, GPIO_PIN_26);

撰寫答案

請登錄後再發布答案,點擊登錄

發布
問題

分享
好友

手機
浏覽

掃碼手機浏覽