OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 13769|回复: 15

用stm32的SPI驱动DAC108S085芯片的配置问题

[复制链接]

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2013-11-15
在线时间
0 小时
发表于 2014-1-7 19:09:53 | 显示全部楼层 |阅读模式
因为以前没有用过DAC108S085这个芯片,这样配置完以后,在DA的输出端检测 不到电压,各位有用过这个芯片的没有,帮忙 看一下!谢谢!( 附上DA手册)


#include "spi.h"

void SPI_DAC_Init(void)
{
  SPI_InitTypeDef  SPI_InitStructure;
  GPIO_InitTypeDef GPIO_InitStructure;
  
  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOD, ENABLE);
  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
 
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //SPI1_SCK
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //SPI1_MOSI
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);


  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; //SPI1_NSS
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  
  SPI_DAC_CS_HIGH();//拉高PA4脚

  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  // 两线全双工模式
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; //时钟下降沿采样
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
  SPI_InitStructure.SPI_CRCPolynomial = 7;
  SPI_Init(SPI1, &SPI_InitStructure);

  /* Enable SPI1  */
  SPI_Cmd(SPI1, ENABLE);
}

void SPI_DAC_SendByte(u16 byte)
{
  u16 i =0;
  SPI_DAC_CS_LOW(); 
  /* Loop while DR register in not emplty */
  while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);  //发送缓存空时向下执行

  /* Send byte through the SPI1 peripheral */
  SPI_I2S_SendData(SPI1, byte);
  for(i = 500; i>0; i--);
  SPI_DAC_CS_HIGH();

}

#include "stm32f10x.h"
#include "spi.h"

#define DAC_A_FULL   0x0FFC
#define DAC_B_three_quarters   0x1C00
#define DAC_C_half 0x2800
#define DAC_D_one_quarter 0x3400
#define DAC_E_FULL 0x4FFC
#define DAC_F_half 0x5800
#define DAC_UPDATE 0xA03F //更新6个通道的电压值


int main(void)
{
SPI_DAC_Init();
SPI_DAC_SendByte(DAC_A_FULL);
SPI_DAC_SendByte(DAC_B_three_quarters);
SPI_DAC_SendByte(DAC_C_half);
SPI_DAC_SendByte(DAC_D_one_quarter);
SPI_DAC_SendByte(DAC_E_FULL);
SPI_DAC_SendByte(DAC_F_half);

       SPI_DAC_SendByte(DAC_UPDATE);
while(1) ;

}





DAC108S085_IcpdfCom.pdf

391.16 KB, 下载次数: 855

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-1-7 22:49:36 | 显示全部楼层
建议先检查通信正常没有.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-1-8 08:40:21 | 显示全部楼层
回复【楼主位】xiaoyucumt:
---------------------------------
原子哥说的没错,哈哈

抓波形,看下通讯和发送的数据什么的对不对的上,建议用低速
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2014-1-10
在线时间
1 小时
发表于 2014-1-10 11:34:36 | 显示全部楼层
楼主,你也在设计用stm32的SPI驱动TLV5617(两路DA输出5V)芯片的配置问题,你有搞定了吗?DAC108S085是做SPI主还是从?
回复 支持 反对

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2014-1-10
在线时间
1 小时
发表于 2014-1-10 11:54:30 | 显示全部楼层
楼主,你在设计的用stm32的SPI驱动DAC108S085 芯片的配置问题,我也在设计TLV5617(两路DA输出5V)芯片的配置问题,你有搞定了吗?是做SPI主还是从?

急急!!!
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2013-11-15
在线时间
0 小时
 楼主| 发表于 2014-1-13 13:21:08 | 显示全部楼层
回复【5楼】molys:
---------------------------------
我现在还没搞定,因为时钟信号 是由主机提供的,所以的我的SPI 是做主的~
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2013-11-15
在线时间
0 小时
 楼主| 发表于 2014-1-13 13:23:24 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
谢谢原子哥,我检查了,通信是正常的,时钟信号,DATA信号都对,可是输出端口还是检测 不到电压。。。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2014-1-17
在线时间
0 小时
发表于 2014-1-17 09:31:27 | 显示全部楼层
回复【7楼】xiaoyucumt:
---------------------------------
我也在用stm32的spi驱动DAC128s085,芯片跟你的差不多,问题也是一样的,一起交流一下吧,下面是我的代码:
void SPI2_DAC_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef  SPI_InitStructure;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);  
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE );

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT ;    //IO输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP ; //输出方式设置:推挽
GPIO_Init(GPIOB, &GPIO_InitStructure);   //片选线

GPIO_SetBits(GPIOB,GPIO_Pin_14); //禁止片选

GPIO_PinAFConfig(GPIOB, GPIO_PinSource10, GPIO_AF_SPI2);//时钟线
GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);//数据MOSI
 
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽
  GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP; //上拉
GPIO_Init(GPIOB, &GPIO_InitStructure);
//配置SPI2引脚模式
  //GPIO_SetBits(GPIOB,GPIO_Pin_10 | GPIO_Pin_15);

SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx;  //设置SPI单向或者双向的数据模式:SPI设置为单线发送
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //设置SPI工作模式:设置为主SPI
SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b; //设置SPI的数据大小:SPI发送接收16位帧结构
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; //选择了串行时钟的稳态:时钟悬空高
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //数据捕获于第二个时钟沿
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; //定义波特率预分频的值:波特率预分频值为256
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始
SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC值计算的多项式
SPI_Init(SPI2, &SPI_InitStructure);  //根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器
 
SPI_Cmd(SPI2, ENABLE); //使能SPI外设

}
u8 DAC_Channel(u8 Channel,u16 Voltage)
{
u16  retry=0;
u16  Count=5;
GPIO_ResetBits(GPIOB,GPIO_Pin_14); //使能DAC
//while(Count) Count--;
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) //检测发送标志位
{
retry++;
if(retry>200) return 0;
}
retry=0;
SPI_I2S_SendData(SPI2, 0xbfff);  //通过SPI2发送一个数据     
Count=3333; 
while(Count) Count--;
GPIO_SetBits(GPIOB,GPIO_Pin_14); //禁止片选
return SPI_I2S_ReceiveData(SPI2); 

}
希望互有启发,私信加qq交流一下。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2014-1-17
在线时间
0 小时
发表于 2014-1-17 09:37:33 | 显示全部楼层
回复【7楼】xiaoyucumt:
---------------------------------
我的128s085和你的108s085手册一样的,只是位数不一样,一起学习啊
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2013-11-15
在线时间
0 小时
 楼主| 发表于 2014-7-18 14:45:39 | 显示全部楼层
回复【9楼】临风1015:
---------------------------------
好久没来这逛了,你的问题解决了吧?
回复 支持 反对

使用道具 举报

3

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2014-8-11
在线时间
1 小时
发表于 2015-1-30 11:13:57 | 显示全部楼层
LZ 搞定了吗?
回复 支持 反对

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2015-2-4
在线时间
7 小时
发表于 2015-3-9 16:07:04 | 显示全部楼层
回复【10楼】xiaoyucumt:
---------------------------------
你的问题搞好没,我想做个4通道的DAC.求指导。加我qq1069182055
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2015-11-24
在线时间
2 小时
发表于 2015-11-24 15:31:56 | 显示全部楼层
请问你搞了吗?我也遇到同样的问题了
回复 支持 反对

使用道具 举报

5

主题

74

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
329
金钱
329
注册时间
2015-9-11
在线时间
46 小时
发表于 2016-7-9 14:04:04 | 显示全部楼层
最近想做LTC2600的驱动,来看看.
迫于生计
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2020-5-27
在线时间
25 小时
发表于 2020-9-9 16:30:57 | 显示全部楼层
有人有成功的代码参考吗
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2021-5-6
在线时间
1 小时
发表于 2021-5-6 11:23:34 来自手机 | 显示全部楼层
谁能教教我DAC108S085怎么和单片机接线…
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-24 13:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表