valve_debugging/User/system/user_spi.c

157 lines
4.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "user_spi.h"
#define SPI_BUFFER_SIZE 255
static uint8_t spi_rx_buffer[SPI_BUFFER_SIZE] = {0};
int32_t spi_transmit_receive(SPI_HandleTypeDef *hspi, uint8_t *data_write, uint8_t bytes_number)
{
if (HAL_SPI_TransmitReceive(hspi, data_write, (uint8_t *)spi_rx_buffer, bytes_number, 1000) != HAL_OK)
{
return FAIL;
}
/* Copy the SPI receive buffer to the supplied data buffer to return to caller*/
memcpy(data_write, spi_rx_buffer, bytes_number);
return TRUE;
}
/**
* @brief 初始化DAC161S997的SPI接口
*
* 该函数用于初始化DAC161S997的SPI接口包括设置SPI的模式、方向、数据大小、时钟极性、时钟相位、NSS信号、波特率预分频器、起始位、TI模式、CRC计算和CRC多项式等参数。
*
* @return 无返回值
*/
void dac161s997_spi_init(void)
{
hspi1.Instance = SPI1;
hspi1.Init.Mode = SPI_MODE_MASTER;
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi1.Init.NSS = SPI_NSS_SOFT;
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi1.Init.CRCPolynomial = 10;
if (HAL_SPI_Init(&hspi1) != HAL_OK)
{
Error_Handler();
}
}
void dac161s997_cs_on(uint8_t dac_num)
{
switch (dac_num)
{
case DAC161S997_1:
HAL_GPIO_WritePin(DAC1_CS_GPIO_Port, DAC1_CS_Pin, GPIO_PIN_RESET);
break;
case DAC161S997_2:
HAL_GPIO_WritePin(DAC2_CS_GPIO_Port, DAC2_CS_Pin, GPIO_PIN_RESET);
break;
case DAC161S997_3:
HAL_GPIO_WritePin(DAC3_CS_GPIO_Port, DAC3_CS_Pin, GPIO_PIN_RESET);
break;
case DAC161S997_4:
HAL_GPIO_WritePin(DAC4_CS_GPIO_Port, DAC4_CS_Pin, GPIO_PIN_RESET);
break;
case DAC161S997_5:
HAL_GPIO_WritePin(DAC5_CS_GPIO_Port, DAC5_CS_Pin, GPIO_PIN_RESET);
break;
case DAC161S997_6:
HAL_GPIO_WritePin(DAC6_CS_GPIO_Port, DAC6_CS_Pin, GPIO_PIN_RESET);
break;
case DAC161S997_7:
HAL_GPIO_WritePin(DAC7_CS_GPIO_Port, DAC7_CS_Pin, GPIO_PIN_RESET);
break;
case DAC161S997_8:
HAL_GPIO_WritePin(DAC8_CS_GPIO_Port, DAC8_CS_Pin, GPIO_PIN_RESET);
break;
case DAC161S997_9:
HAL_GPIO_WritePin(DAC9_CS_GPIO_Port, DAC9_CS_Pin, GPIO_PIN_RESET);
break;
case DAC161S997_10:
HAL_GPIO_WritePin(DAC10_CS_GPIO_Port, DAC10_CS_Pin, GPIO_PIN_RESET);
break;
case DAC161S997_11:
HAL_GPIO_WritePin(DAC11_CS_GPIO_Port, DAC11_CS_Pin, GPIO_PIN_RESET);
break;
case DAC161S997_12:
HAL_GPIO_WritePin(DAC12_CS_GPIO_Port, DAC12_CS_Pin, GPIO_PIN_RESET);
break;
case DAC161S997_13:
HAL_GPIO_WritePin(DAC13_CS_GPIO_Port, DAC13_CS_Pin, GPIO_PIN_RESET);
break;
case DAC161S997_14:
HAL_GPIO_WritePin(DAC14_CS_GPIO_Port, DAC14_CS_Pin, GPIO_PIN_RESET);
break;
case DAC161S997_15:
HAL_GPIO_WritePin(DAC15_CS_GPIO_Port, DAC15_CS_Pin, GPIO_PIN_RESET);
break;
case DAC161S997_16:
HAL_GPIO_WritePin(DAC16_CS_GPIO_Port, DAC16_CS_Pin, GPIO_PIN_RESET);
break;
default:
break;
}
}
void dac161s997_cs_off(uint8_t dac_num)
{
switch (dac_num)
{
case DAC161S997_1:
HAL_GPIO_WritePin(DAC1_CS_GPIO_Port, DAC1_CS_Pin, GPIO_PIN_SET);
break;
case DAC161S997_2:
HAL_GPIO_WritePin(DAC2_CS_GPIO_Port, DAC2_CS_Pin, GPIO_PIN_SET);
break;
case DAC161S997_3:
HAL_GPIO_WritePin(DAC3_CS_GPIO_Port, DAC3_CS_Pin, GPIO_PIN_SET);
break;
case DAC161S997_4:
HAL_GPIO_WritePin(DAC4_CS_GPIO_Port, DAC4_CS_Pin, GPIO_PIN_SET);
break;
case DAC161S997_5:
HAL_GPIO_WritePin(DAC5_CS_GPIO_Port, DAC5_CS_Pin, GPIO_PIN_SET);
break;
case DAC161S997_6:
HAL_GPIO_WritePin(DAC6_CS_GPIO_Port, DAC6_CS_Pin, GPIO_PIN_SET);
break;
case DAC161S997_7:
HAL_GPIO_WritePin(DAC7_CS_GPIO_Port, DAC7_CS_Pin, GPIO_PIN_SET);
break;
case DAC161S997_8:
HAL_GPIO_WritePin(DAC8_CS_GPIO_Port, DAC8_CS_Pin, GPIO_PIN_SET);
break;
case DAC161S997_9:
HAL_GPIO_WritePin(DAC9_CS_GPIO_Port, DAC9_CS_Pin, GPIO_PIN_SET);
break;
case DAC161S997_10:
HAL_GPIO_WritePin(DAC10_CS_GPIO_Port, DAC10_CS_Pin, GPIO_PIN_SET);
break;
case DAC161S997_11:
HAL_GPIO_WritePin(DAC11_CS_GPIO_Port, DAC11_CS_Pin, GPIO_PIN_SET);
break;
case DAC161S997_12:
HAL_GPIO_WritePin(DAC12_CS_GPIO_Port, DAC12_CS_Pin, GPIO_PIN_SET);
break;
case DAC161S997_13:
HAL_GPIO_WritePin(DAC13_CS_GPIO_Port, DAC13_CS_Pin, GPIO_PIN_SET);
break;
case DAC161S997_14:
HAL_GPIO_WritePin(DAC14_CS_GPIO_Port, DAC14_CS_Pin, GPIO_PIN_SET);
break;
case DAC161S997_15:
HAL_GPIO_WritePin(DAC15_CS_GPIO_Port, DAC15_CS_Pin, GPIO_PIN_SET);
break;
case DAC161S997_16:
HAL_GPIO_WritePin(DAC16_CS_GPIO_Port, DAC16_CS_Pin, GPIO_PIN_SET);
break;
default:
break;
}
}