是否可以提供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
被浏览
1.1k
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);

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览