时序图
寄存器
看datasheet,支持20Mhz,使用模式0,0或者模式1,1,使用cubemx生成代码;
使用SPI1
MCP4822.H中的定义
// Define DAC write command
#define DAC_WRITE_CMD 0xFFFF
// Define DAC channel selection
#define DAC_CHANNEL_A 0x0000
#define DAC_CHANNEL_B 0x8000
// Define DAC output gain
#define DAC_GAIN_1X 0x2000
#define DAC_GAIN_2X 0x0000
// Define DAC output buffer
#define DAC_BUFFER_DISABLED 0x0000
#define DAC_BUFFER_ENABLED 0x1000
//CS
#define MCP4822_CS_PORT GPIOA
#define MCP4822_CS_PIN GPIO_PIN_4
//SCK
#define MCP4822_SCK_PORT GPIOA
#define MCP4822_SCK_PIN GPIO_PIN_5
//SDI
#define MCP4822_SDI_PORT GPIOA
#define MCP4822_SDI_PIN GPIO_PIN_7
//LDAC
#define MCP4822_LDAC_PORT GPIOA
#define MCP4822_LDAC_PIN GPIO_PIN_3
#define CS PAout(4)
#define SCK PAout(5)
#define SDI PAout(7)
#define LDAC PAout(3)
// Function to send data to the DAC
void DAC_Send(uint16_t channel, uint16_t gain, uint16_t buffer, uint16_t value)
{
uint16_t spi_data = 0;
spi_data |= channel;
spi_data |= gain;
spi_data |= buffer;
spi_data |= value;
LDAC=0;
CS = 0;
// Send data
if( HAL_SPI_Transmit(&hspi1, (uint8_t *)&spi_data, 2, 100) != HAL_OK )
CS = 1;
LDAC=1;
}
main函数中,就那么两句话,写通道A,B的电压,
DAC_Send(DAC_CHANNEL_A, DAC_GAIN_2X, DAC_BUFFER_ENABLED, 550);
DAC_Send(DAC_CHANNEL_B, DAC_GAIN_2X, DAC_BUFFER_ENABLED, 750);
但是不知道为什么DA就是不能写出来,不知道错在哪里;