#include "dac161s997.h" /** * @brief 向DAC161S997芯片写入寄存器值 * * 该函数通过SPI接口向DAC161S997芯片写入指定的寄存器值。 * * @param dac_num DAC芯片编号 * @param reg 要写入的寄存器地址 * @param data 要写入的数据,16位 */ void dac161s997_write_reg(chip_type_e 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; board_spi_init(dac_num); // 初始化SPI,因为ADC芯片也用SPI1,但是时序不同 board_spi_cs_on(dac_num); spi_transmit_receive(&hspi1, data_buffer, 3); board_spi_cs_off(dac_num); } /** * @brief 初始化DAC161S997 DAC设备 */ void dac161s997_init(void) { dac161s997_write_reg(DAC161S997_1, DAC161S997_ERR_LOW_REG, 0xFFFF); dac161s997_write_reg(DAC161S997_1, DAC161S997_ERR_CONFIG_REG, 0x070E); dac161s997_write_reg(DAC161S997_2, DAC161S997_ERR_LOW_REG, 0xFFFF); dac161s997_write_reg(DAC161S997_2, DAC161S997_ERR_CONFIG_REG, 0x070E); } /** * @brief DAC161S997芯片输出函数 * * 此函数用于设置DAC161S997芯片的输出电流。 * * @param dac_num DAC芯片类型 * @param current 需要设置的电流值,单位:毫安 */ void dac161s997_output(chip_type_e 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; board_spi_init(dac_num); // 初始化SPI,因为ADC芯片也用SPI1,但是时序不同 board_spi_cs_on(dac_num); spi_transmit_receive(&hspi1, data_buffer, 3); board_spi_cs_off(dac_num); }