大家好、
我的客户使用 DAC1220进行模拟输出、他们已经测试了5个样本、所有样本在加电时都输出2.56V、这是不需要的。 我建议写入寄存器 CALPIN 以在校准期间断开输出、并建议 MD 设置自校准、但它不起作用。 您可以查看此应用吗?
BR
Sirui
.c 文件:
#include "dac1220.h"
#include "main.h"
#include "SysTick .h"
void dac1220_GPIO_init ()
{
RCU_periph_clock_enable (RCU_GPIOA);
GPIO_MODE_SET (GPIOA、GPIO_MODE_OUTPUT、GPIO_PUPD_NONE、GPIO_PIN_4|GPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1);
GPIO_output_options_set (GPIOA、GPIO_OTYPE_PP、GPIO_OSPEED_50MHz、GPIO_PIN_4|GPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1);
}
void da_spi0_init()
{
RCU_periph_clock_enable (RCU_GPIOA);
RCU_periph_clock_enable (RCU_SPI0);
GPIO_af_set (GPIOA、GPIO_AF_5、GPIO_PIN_5 | GPIO_PIN_6 |GPIO_PIN_7);
GPIO_MODE_SET (GPIOA、GPIO_MODE_AF、GPIO_PUPD_NONE、GPIO_PIN_5 | GPIO_PIN_6 |GPIO_PIN_7);
GPIO_output_options_set (GPIOA、GPIO_OTYPE_PP、GPIO_OSPEED_50MHz、GPIO_PIN_5 | GPIO_PIN_6 |GPIO_PIN_7);
DASPI0_CS0_OFF;
DASPI0_CS1_OFF;
DASPI0_CS2_OFF;
DASPI0_CS3_OFF;
spi_parameter_struct spi_init_struct;
/* SPI1参数配置*/
SPI_INIT_STRUCT.TRANS_MODE = SPI_TRANSMODE_FULLDUPLEX;
spi_init_struct.device_mode = SPI_MASTER;
spi_init_struct.frame_size = SPI_FRAMESIZE_8位;
SPI_INIT_struct.clock_polarity 相位= SPI_CK_PL_LOW_PH_2EDGE;
spi_init_struct.nss = SPI_NSS_Soft;
spi_init_struct.prescale = SPI_PSC_64;
SPI_init_struct.endian = SPI_ENDIAN_MSB;
SPI_init (SPI0、&SPI_INIT_STRUT);
SPI_ENABLE (SPI0);
}
void dac1220_init()
{
DASPI0_CS0_ON;
delay_us (100);
DA_spi0_readwrite (0x04);
delay_us (100);
DA_spi0_readwrite (0x00);
DASPI0_CS0_OFF;
DASPI0_CS0_ON;
delay_us (100);
DA_spi0_readwrite (0x05);
delay_us (100);
DA_spi0_readwrite (0xA1);
DASPI0_CS0_OFF;
DELAY_1ms (1000);
DASPI0_CS0_ON;
delay_us (100);
DA_spi0_readwrite (0x04);
delay_us (100);
DA_spi0_readwrite (0x00);
DASPI0_CS0_OFF;
DASPI0_CS0_ON;
delay_us (100);
DA_spi0_readwrite (0x05);
delay_us (100);
DA_spi0_readwrite (0xA0);
DASPI0_CS0_OFF;
delay_us (100);
DASPI0_CS1_ON;
delay_us (100);
DA_spi0_readwrite (0x04);
delay_us (100);
DA_spi0_readwrite (0x00);
DASPI0_CS1_OFF;
delay_us (100);
DASPI0_CS1_ON;
delay_us (100);
DA_spi0_readwrite (0x05);
delay_us (100);
DA_spi0_readwrite (0xA1);
DASPI0_CS1_OFF;
DELAY_1ms (1000);
DASPI0_CS1_ON;
delay_us (100);
DA_spi0_readwrite (0x04);
delay_us (100);
DA_spi0_readwrite (0x00);
DASPI0_CS1_OFF;
delay_us (100);
DASPI0_CS1_ON;
delay_us (100);
DA_spi0_readwrite (0x05);
delay_us (100);
DA_spi0_readwrite (0xA0);
DASPI0_CS1_OFF;
DASPI0_CS2_ON;
delay_us (100);
DA_spi0_readwrite (0x04);
delay_us (100);
DA_spi0_readwrite (0x00);
DASPI0_CS2_OFF;
DASPI0_CS2_ON;
delay_us (100);
DA_spi0_readwrite (0x05);
delay_us (100);
DA_spi0_readwrite (0xA1);
DASPI0_CS2_OFF;
DELAY_1ms (1000);
DASPI0_CS2_ON;
delay_us (100);
DA_spi0_readwrite (0x04);
delay_us (100);
DA_spi0_readwrite (0x00);
DASPI0_CS1_OFF;
DASPI0_CS2_ON;
delay_us (100);
DA_spi0_readwrite (0x05);
delay_us (100);
DA_spi0_readwrite (0xA0);
DASPI0_CS2_OFF;
DASPI0_CS3_ON;
delay_us (100);
DA_spi0_readwrite (0x04);
delay_us (100);
DA_spi0_readwrite (0x00);
DASPI0_CS3_OFF;
DASPI0_CS3_ON;
delay_us (100);
DA_spi0_readwrite (0x05);
delay_us (100);
DA_spi0_readwrite (0xA1);
DASPI0_CS3_OFF;
DELAY_1ms (1000);
DASPI0_CS3_ON;
delay_us (100);
DA_spi0_readwrite (0x04);
delay_us (100);
DA_spi0_readwrite (0x00);
DASPI0_CS3_OFF;
DASPI0_CS3_ON;
delay_us (100);
DA_spi0_readwrite (0x05);
delay_us (100);
DA_spi0_readwrite (0xA0);
DASPI0_CS3_OFF;
}
uint16_t da_spi0_readwrite (uint8_t data)
{
uint16_t spidata;
while (reset = SPI_I2S_FLAG (SPI0、SPI_FLAG_TBE))
{}
SPI_I2S_DATA_Transmit (SPI0、DATA);
while (reset = SPI_I2S_FLAG (SPI0、SPI_FLAG_RBNE))
{}
spidata = SPI_I2S_DATA_Receive (SPI0);
退货 spidata;
}
void dac1220_out (uint8_t ch、uint32_t 数据)
{
如果(0x00 == ch)
{
DASPI0_CS0_ON;
delay_us (100);
DA_spi0_readwrite (0x00);
delay_us (100);
da_spi0_readwrite((data>>12)&0xff);
DASPI0_CS0_OFF;
DASPI0_CS0_ON;
delay_us (100);
DA_spi0_readwrite (0x01);
delay_us (100);
da_spi0_readwrite((data>>4)&0xff);
DASPI0_CS0_OFF;
DASPI0_CS0_ON;
delay_us (100);
DA_spi0_readwrite (0x02);
delay_us (100);
da_spi0_readwrite ((data<<4)&0xf0);
DASPI0_CS0_OFF;
}
否则、如果(0x01 = ch)
{
DASPI0_CS1_ON;
delay_us (100);
DA_spi0_readwrite (0x00);
delay_us (100);
da_spi0_readwrite((data>>12)&0xff);
DASPI0_CS1_OFF;
delay_us (100);
DASPI0_CS1_ON;
delay_us (100);
DA_spi0_readwrite (0x01);
delay_us (100);
da_spi0_readwrite((data>>4)&0xff);
DASPI0_CS1_OFF;
delay_us (100);
DASPI0_CS1_ON;
delay_us (100);
DA_spi0_readwrite (0x02);
delay_us (100);
da_spi0_readwrite ((data<<4)&0xf0);
DASPI0_CS1_OFF;
}
否则、如果(0x02 = ch)
{
DASPI0_CS2_ON;
delay_us (100);
DA_spi0_readwrite (0x00);
delay_us (100);
da_spi0_readwrite((data>>12)&0xff);
DASPI0_CS2_OFF;
DASPI0_CS2_ON;
delay_us (100);
DA_spi0_readwrite (0x01);
delay_us (100);
da_spi0_readwrite((data>>4)&0xff);
DASPI0_CS2_OFF;
DASPI0_CS2_ON;
delay_us (100);
DA_spi0_readwrite (0x02);
delay_us (100);
da_spi0_readwrite ((data<<4)&0xf0);
DASPI0_CS2_OFF;
}
否则、如果(0x03 = ch)
{
DASPI0_CS3_ON;
delay_us (100);
DA_spi0_readwrite (0x00);
delay_us (100);
da_spi0_readwrite((data>>12)&0xff);
DASPI0_CS3_OFF;
DASPI0_CS3_ON;
delay_us (100);
DA_spi0_readwrite (0x01);
delay_us (100);
da_spi0_readwrite((data>>4)&0xff);
DASPI0_CS3_OFF;
DASPI0_CS3_ON;
delay_us (100);
DA_spi0_readwrite (0x02);
delay_us (100);
da_spi0_readwrite ((data<<4)&0xf0);
DASPI0_CS3_OFF;
}
}