大神帮忙看看,还有原子哥哥帮忙看看,我用的是F103单片机,dac芯片用的是MAX5742,仿真测试输入引脚电平翻转正常,可是就是没有输出,为什么???大神帮忙分析下
void DAC_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//使能PORTC时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;//PE2~4
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOC, &GPIO_InitStructure); //根据设定参数初始化GPIOB.5
GPIO_SetBits(GPIOC,GPIO_Pin_0);//DAC1_CS片选拉高
GPIO_SetBits(GPIOC,GPIO_Pin_3);//DAC2_CS片选拉高
GPIO_ResetBits(GPIOC,GPIO_Pin_1);//DAC1_SCLK时钟初始状态为低
GPIO_ResetBits(GPIOC,GPIO_Pin_4);//DAC2_SCLK时钟初始状态为低
GPIO_ResetBits(GPIOC,GPIO_Pin_2);//DAC1_DIN总线初始状态为低
GPIO_ResetBits(GPIOC,GPIO_Pin_5);//DAC2_DIN总线初始状态为低
}
//DAC1数据转换函数
//n:表示通道n
//DA_Value:表示要设置的通道输出电压值
void MAX5742_SetDAC1_Value(u16 n,u16 DA_Value)
{
u8 i;
u16 setdata=0;
DAC1_CS=1;
DAC1_SCLK=0;//拉低时钟
setdata=((n<<12)&0xf000)+(DA_Value&0x0fff);
for(i=0;i<16;i++)
{
DAC1_CS=0;//片选拉低开始传数据
DAC1_SCLK=1;//时钟上升沿启动传数据
if(setdata&0x8000)
{
DAC1_DIN=1;
}
else
{
DAC1_DIN=0;
}
DAC1_SCLK=0;//时钟下降沿锁存数据
setdata<<=1;
}
DAC1_CS=1;
}
//头文件
#ifndef _DAC_H
#define _DAC_H
#include "sys.h"
#define DAC1_CS PCout(0)
#define DAC1_SCLK PCout(1)
#define DAC1_DIN PCout(2)
#define DAC2_CS PCout(3)
#define DAC2_SCLK PCout(4)
#define DAC2_DIN PCout(5)
void DAC_Init(void);
void MAX5742_SetDAC1_Value(u16 n,u16 DA_Value);
void MAX5742_SetDAC2_Value(u16 n,u16 DA_Value);
#endif
C:\Users\czy\Desktop\QQ截图20161010145305.png
C:\Users\czy\Desktop\QQ截图20161010145406.png |