打印
[STM32F1]

DAC7512一直没有输出啊!!

[复制链接]
1812|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沐紫工程师|  楼主 | 2017-3-8 09:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "DAC7512.h"

static void SPI_GPIO_Config(void)
{
        GPIO_InitTypeDef  GPIO_InitStructure;

        DAC7512_SPI_GPIO_APBxClock_FUN (DAC7512_SPI_GPIO_CLK,ENABLE);

        GPIO_InitStructure.GPIO_Pin   = DAC7512_SPI_CS_PIN;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;               
        GPIO_Init(DAC7512_SPI_CS_PORT,&GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin   = DAC7512_SPI_SCK_PIN;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_PP;               
        GPIO_Init(DAC7512_SPI_SCK_PORT,&GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin   = DAC7512_SPI_MOSI_PIN;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_PP;               
        GPIO_Init(DAC7512_SPI_MOSI_PORT,&GPIO_InitStructure);

        DAC7512_SPI_CS_HIGH;
}

static void SPI_Mode_Config(void)
{
        SPI_InitTypeDef  SPI_InitStructure;
        DAC7512_SPI_APBxClock_FUN(DAC7512_SPI_CLK,ENABLE);

        SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;
        SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge ;
        SPI_InitStructure.SPI_CPOL = SPI_CPOL_High ;
        SPI_InitStructure.SPI_CRCPolynomial = 0;
        SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;
        SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx;
        SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
        SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
        SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;       

        SPI_Init(DAC7512_SPIx,&SPI_InitStructure);
        SPI_Cmd(DAC7512_SPIx,ENABLE);
}

void SPI_DAC7512_Init(void)
{       
        SPI_GPIO_Config();
        SPI_Mode_Config();
}



void SPI_DAC7512_Send_Byte(uint16_t data)
{
        while(SPI_I2S_GetFlagStatus(DAC7512_SPIx,SPI_I2S_FLAG_TXE) == RESET);
        SPI_I2S_SendData(DAC7512_SPIx,data);
}

void Delay(uint8_t s)
{
        uint8_t i = 0;
        for(i=0;i<s;i++)
        {
                __NOP();
        }
}

#include "stm32f10x.h"
#include "DAC7512.h"

uint16_t data1 = 0x00ff;

int main(void)
{
        SPI_DAC7512_Init();
  while(1)
        {
                DAC7512_SPI_CS_LOW;
                SPI_DAC7512_Send_Byte(data1);
                Delay(60);
                DAC7512_SPI_CS_HIGH;       
        }
}
求大神帮忙看看这个程序,用示波器测试时序都没问题啊,就是没有输出
沙发
wgwlgy| | 2017-3-8 10:51 | 只看该作者
本帖最后由 wgwlgy 于 2017-3-8 10:58 编辑

我使用过没问题,用的是stm32F103VCT6
//DAC7512接口定义
#define  DAC_CLK      GPIO_Pin_14 //PD14
#define  DAC_CLK_H    GPIOD->BSRR = DAC_CLK
#define  DAC_CLK_L    GPIOD->BRR = DAC_CLK
#define  DAC_DAT      GPIO_Pin_15 //PD15
#define  DAC_DAT_H    GPIOD->BSRR = DAC_DAT
#define  DAC_DAT_L    GPIOD->BRR = DAC_DAT
#define  DAC_CSA      GPIO_Pin_11 //PD11
#define  DAC_CSA_H    GPIOD->BSRR = DAC_CSA
#define  DAC_CSA_L    GPIOD->BRR = DAC_CSA
#define  DAC_CSC      GPIO_Pin_13 //PD13
#define  DAC_CSC_H    GPIOD->BSRR = DAC_CSC
#define  DAC_CSC_L    GPIOD->BRR = DAC_CSC

void DAC_OUT(u16 data, u8 flag) //data 是12位AD值,flag 是两个7512中的一个(驱动两片7512)
{
      if(flag) DAC_CSC_L;
      else DAC_CSA_L;
      for(u16 i=0; i<16; i++)
      {
          DAC_CLK_H;
          if(0x8000 & data)
            DAC_DAT_H;
          else
            DAC_DAT_L;
          DAC_CLK_L;
          data <<= 1;        
      }
      if(flag) DAC_CSC_H;
      else DAC_CSA_H;
}

这是我正在使用的程序

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
沐紫工程师 + 1 很给力!
板凳
沐紫工程师|  楼主 | 2017-3-8 20:28 | 只看该作者
wgwlgy 发表于 2017-3-8 10:51
我使用过没问题,用的是stm32F103VCT6
//DAC7512接口定义
#define  DAC_CLK      GPIO_Pin_14 //PD14

可以加QQ详聊嘛?我的QQ:193174872
我调试了一个礼拜都没弄好

使用特权

评论回复
地板
沐紫工程师|  楼主 | 2017-3-9 09:30 | 只看该作者
没人吗?只能自己顶一下,看到的大神给些意见啊

使用特权

评论回复
5
wgwlgy| | 2017-3-13 11:28 | 只看该作者
沐紫工程师 发表于 2017-3-9 09:30
没人吗?只能自己顶一下,看到的大神给些意见啊

首先你得检查硬件有没有问题,比如电压正常否,口线连接是否正确(有没有短路、断路,与其他线误连之类的),再检查程序上的语句

使用特权

评论回复
6
wgwlgy| | 2017-3-13 11:28 | 只看该作者
也可以加我QQ:595681543

使用特权

评论回复
7
i1mcu| | 2017-3-13 14:35 | 只看该作者
DAC7512串行数模转换器

使用特权

评论回复
8
i1mcu| | 2017-3-13 14:40 | 只看该作者
配置的IO是否存在问题?

使用特权

评论回复
9
沐紫工程师|  楼主 | 2017-3-13 18:59 | 只看该作者
wgwlgy 发表于 2017-3-13 11:28
也可以加我QQ:595681543

谢谢你,这个程序我已经弄好了

使用特权

评论回复
10
沐紫工程师|  楼主 | 2017-3-13 19:00 | 只看该作者
i1mcu 发表于 2017-3-13 14:35
DAC7512串行数模转换器

谢谢,通过硬件模拟已经弄好了。就是不知道为什么,用库函数没用

使用特权

评论回复
11
沐紫工程师|  楼主 | 2017-3-13 19:00 | 只看该作者
i1mcu 发表于 2017-3-13 14:40
配置的IO是否存在问题?

没有啊,都很正常,这个程序已经弄好了

使用特权

评论回复
12
沐紫工程师|  楼主 | 2017-3-13 19:02 | 只看该作者
wgwlgy 发表于 2017-3-13 11:28
也可以加我QQ:595681543

你的QQ需要答案才能加啊?

使用特权

评论回复
13
lefeng| | 2017-3-14 21:23 | 只看该作者
通过硬件模拟已经弄好了

硬件模拟怎么做的

使用特权

评论回复
14
沐紫工程师|  楼主 | 2017-3-15 09:27 | 只看该作者
lefeng 发表于 2017-3-14 21:23
硬件模拟怎么做的

通过写传递函数,控制DIN引脚输出高低电平

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

18

帖子

1

粉丝