中科因仑“3+1”工程特种兵精英论坛
标题:
用STM32F103xx的SPI与DAC7612通信的注意地方
[打印本页]
作者:
谭力源
时间:
2016-6-6 18:02
标题:
用STM32F103xx的SPI与DAC7612通信的注意地方
关于DAC7612,此IC是TI的12bit数模转换芯片,具体手册可百度查阅;
在用STM32的spi接口与7612通信时:
注意1:
7612的SPI时钟极性CPOL为高电平
7612的SPI时钟相位CPHA为第2个时钟沿进行采样
stm32 spi设置如下:
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; //时钟悬空gao
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //CPHA=1 数据捕获于第2个时钟沿
注意2:
由于7612的数据位为12,高2为通道选择位,共14bit
DAC_CH1 ===》 A1 = 1; A0 = 0;
DAC_CH2 ===》 A1 = A0 = 1 ;
使用STM32的SPI要发送2次(每次1字节) 才能完成;
又由于7612的12bit数据是移入IC内移位寄存器中,最后通过锁存信号 LDAC过进行更新有效数据;
由下图1所见,这样通过SPI发送,最后的低2bit便会移到7612的寄存器中,这样出来的数据就不正确了,因为12bit中的高2bit被移除了
所以,在A1 A0后添加2bit,这样便可得到有效的12bit进行更新7612的电压输出。
最后附上DAC7612发送程序:
void dac7612WriteValue(u8 chNum, u16 data){
u16 value = 0x0000;
value |= data;
if(chNum == DAC_CH1){
value = (value | 0x8000); //A1 = 1;
value = (value & 0xBFFF); //A0 = 0;
}else if(chNum == DAC_CH2){
value = (value | 0xC000); //A1 = A0 = 1
}
DAC7612_LDAC_DISENABLE(); //h 锁存信号为高
DAC7612_LDAC_DISENABLE(); //h
DAC7612_ENABLE(); //L 使能7612 cs拉低
spi1SendRecvData((value >> 8)&0x00FF); //SPI发送
spi1SendRecvData((value)&0x00FF);
DAC7612_DISENABLE();
DAC7612_DISENABLE(); //h 失能7612 cs拉高
/* 进行锁存操作 */
DAC7612_LDAC_ENABLE(); //L 锁存信号为低
DAC7612_LDAC_ENABLE();
DAC7612_LDAC_ENABLE();
DAC7612_LDAC_DISENABLE(); //h
}
欢迎光临 中科因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/)
Powered by Discuz! X3.4