操蛋的攻城狮 发表于 2017-3-8 09:00:42

STM32与DAC7512问题,时序是对的,就是没输出

#include "DAC7512.h"

static void SPI_GPIO_Config(void)
{
        GPIO_InitTypeDefGPIO_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_InitTypeDefSPI_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;       
        }
}
这是程序,时序用示波器测试是正常的,可芯片就是没有输出,求大神指导啊

ddllxxrr 发表于 2017-3-18 08:59:23

时序出来了符合DAC7512的要求么????象样子是DAC7512没回话

cldym 发表于 2017-3-18 10:16:40

学习学习

hjl2832 发表于 2017-3-18 11:35:12

12位DAC,STM32自己带的就是,为什么还要外挂?

无薪税绵 发表于 2017-3-18 16:22:31

首先要确定硬件正常吗?

中山无雪 发表于 2017-3-18 20:49:19

仔细看下DAC512手册,看看它对时序的要求
页: [1]
查看完整版本: STM32与DAC7512问题,时序是对的,就是没输出