#include "dac161s997.h" /** * @brief 向DAC161S997芯片写入寄存器值 * * 该函数通过SPI接口向DAC161S997芯片写入指定的寄存器值。 * * @param dac_num DAC芯片编号 * @param reg 要写入的寄存器地址 * @param data 要写入的数据,16位 */ void dac161s997_write_reg(uint8_t dac_num, uint8_t reg, uint16_t data) { uint8_t data_buffer[3] = {0, 0, 0}; data_buffer[0] = reg; data_buffer[1] = data >> 8; data_buffer[2] = data; HAL_GPIO_WritePin(DAC1_CS_GPIO_Port, DAC1_CS_Pin, GPIO_PIN_RESET); // CS拉低 HAL_SPI_Transmit(&hspi1, data_buffer, 3, 1000); HAL_GPIO_WritePin(DAC1_CS_GPIO_Port, DAC1_CS_Pin, GPIO_PIN_SET); // CS拉高 } /** * @brief 初始化DAC161S997 DAC设备 */ void dac161s997_init(void) { // 初始化CS引脚 GPIO_InitTypeDef GPIO_InitStruct = {0}; __HAL_RCC_GPIOB_CLK_ENABLE(); GPIO_InitStruct.Pin = DAC1_CS_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; HAL_GPIO_Init(DAC1_CS_GPIO_Port, &GPIO_InitStruct); HAL_GPIO_WritePin(DAC1_CS_GPIO_Port, DAC1_CS_Pin, GPIO_PIN_SET); // 初始化DAC161S997芯片寄存器 dac161s997_write_reg(1, DAC161S997_ERR_LOW_REG, 0xFFFF); dac161s997_write_reg(1, DAC161S997_ERR_CONFIG_REG, 0x070E); } /** * @brief DAC161S997芯片输出函数 * * 此函数用于设置DAC161S997芯片的输出电流。 * * @param dac_num DAC芯片类型 * @param current 需要设置的电流值,单位:毫安 */ void dac161s997_output(uint8_t dac_num, float current) { uint32_t dac_code = (uint32_t)((current * 65535.0f) / 24.0f); uint8_t data_buffer[3] = {0, 0, 0}; data_buffer[0] = DAC161S997_DACCODE_REG; data_buffer[1] = dac_code >> 8; data_buffer[2] = dac_code; HAL_GPIO_WritePin(DAC1_CS_GPIO_Port, DAC1_CS_Pin, GPIO_PIN_RESET); // CS拉低 HAL_SPI_Transmit(&hspi1, data_buffer, 3, 1000); HAL_GPIO_WritePin(DAC1_CS_GPIO_Port, DAC1_CS_Pin, GPIO_PIN_SET); // CS拉高 }