野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14182|回复: 6

STM32F103ZET6与DAC7512程序

[复制链接]
发表于 2017-2-28 16:56:50 | 显示全部楼层 |阅读模式
STM32F103ZET6与DAC7512芯片程序如下:[index]
#include "DAC7512.h"

static void SPI_GPIO_Config(void)
{
  GPIO_InitTypeDef  GPIO_InitStructure;
        DAC7512_SPI_GPIO_APBxClock_FUN ( DAC7512_SPI_GPIO_CLK, ENABLE );
        DAC7512_SPI_APBxClock_FUN ( DAC7512_SPI_CLK, ENABLE );

  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);

  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);

//        DAC7512_SPI_CS_HIGH;
}

static void SPI_Mode_Config(void)
{
SPI_InitTypeDef  SPI_InitStructure;
        SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2 ;
        SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge ;
        SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low ;
        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();
}

static 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 SPI_Write_Enable(uint16_t data)
{
                //片选使能
        DAC7512_SPI_CS_LOW;
        SPI_DAC7512_Send_Byte(data);
//        DAC7512_SPI_CS_HIGH        ;
}
大家看看这个程序有什么问题啊?SPI片选信号必须高电平,不然输出电压立马归零了

回复

使用道具 举报

发表于 2017-2-28 18:55:59 | 显示全部楼层
没有用过这芯片,帮顶
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-1 09:35:19 | 显示全部楼层
谁能帮忙看看这个芯片的datasheet,这程序写了,有输出,但是只输出一会就没了
回复 支持 反对

使用道具 举报

发表于 2017-3-7 14:05:28 | 显示全部楼层
DA芯片时序不对
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-8 08:43:40 | 显示全部楼层

嗯,这是最早的程序,后来我改了一下,但是时序时序是对的,但是芯片还是没有输出!#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;       
        }
}

可以再帮我看看嘛?这个程序的时序是对的,但是芯片就是没有输出
回复 支持 反对

使用道具 举报

发表于 2017-3-8 13:39:43 | 显示全部楼层
算命先生 发表于 2017-3-8 08:43
嗯,这是最早的程序,后来我改了一下,但是时序时序是对的,但是芯片还是没有输出!#include "DAC7512.h" ...

你六个联系方式 方便交流 这样实时性太差了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-8 14:20:53 | 显示全部楼层
jfzheng 发表于 2017-3-8 13:39
你六个联系方式 方便交流 这样实时性太差了

193174872,这是QQ
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-15 08:02 , Processed in 0.028294 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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