高精度数模转换器DAC9881驱动程序——基于STM32

高精度数模转换器DAC9881驱动程序

DAC9881.h

#ifndef __DAC9881_H
#define __DAC9881_H
 
#include "stm32f4xx.h"
#include "stm32f4xx_sys.h"
#include "delay.h"

#define CS_DAC_LOW()     PBout(12) = 0    
#define CS_DAC_HIGH()    PBout(12) = 1

#define SCL_DAC_LOW()    PBout(13) = 0    
#define SCL_DAC_HIGH()	 PBout(13) = 1    

#define SDO_DAC_LOW()    PBin(14) = 0
#define SDO_DAC_HIGH()	 PBin(14) = 1

//#define SYNC_DAC_LOW()	 PCout(6) = 0
//#define SYNC_DAC_HIGH()	 PCout(6) = 1

#define LDAC_DAC_LOW()    PBout(11) = 0
#define LDAC_DAC_HIGH()    PBout(11) = 1

#define SDI_DAC_LOW() 		     PBout(15)=0
#define SDI_DAC_HIGH() 		     PBout(15)=1
//#define SDI_DAC_HIGH()  PBout(14) = 1
//#define SDI_DAC_LOW()	 PBout(14) = 0

void DAC9881_Init(void);
void WriteToDAC9881(u8 count, u8 *buf);
#endif 

DAC9881.c

#include "DAC9881.h"
#include "usart.h"
 
/*****************************************************************
	GPIOÅäÖÃ:									
							PB12 -----> SPI1_NSS    ----->CS              
							PB13 -----> SPI1_SCK    ----->SCLK               
							PB14 -----> SPI1_MISO   ----->SDO          
							PB15 -----> SPI1_MOSI   ----->SDI   
              PB11 -----> LDAC'                     
              PC6 -----> SYNC                     
*****************************************************************/  
void DAC9881_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
  
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE);
	 
	/*< Configure CS ¡¢CLK and SDI pins ¡¢LDAC'¡¢SYNC pins>*/ 
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_1|GPIO_Pin_15;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
	GPIO_Init(GPIOB,&GPIO_InitStructure);
	
	//GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
  //GPIO_Init(GPIOC, &GPIO_InitStructure);
	//SYNC_DAC_HIGH();
	
//	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15 ;
//	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
//	GPIO_Init(GPIOB,&GPIO_InitStructure);
	
	
	/*< Configure SDO >*/
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14; 
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
	//SYNC_DAC_HIGH();
}  

//Function : Write to the AD7190.
void WriteToDAC9881(u8 count, u8 *buf)
{
	u8	ValueToWrite = 0;
	u8	i = 0;
	u8	j = 0;
	 
  LDAC_DAC_LOW();	    //˨´ò¿ª£¬ÊäÈë¼Ä´æÆ÷ÖµÖ±½Ó¸üе½Êä³ö¼Ä´æÆ÷
	delay_us(1);
//	SCL_DAC_LOW();
//	delay_us(1);
//	CS_DAC_HIGH();
//	delay_us(1);
	CS_DAC_LOW();
	delay_us(1);
	for(i=0;i<count;i++)
 	{
	 	ValueToWrite = *(buf + i);
		for(j=0; j<8; j++)
		{
			delay_us(1);
			SCL_DAC_LOW();
			if(0x80 == (ValueToWrite & 0x80))
			{
				SDI_DAC_HIGH(); 
			}
			else
			{
				SDI_DAC_LOW();
			}
			delay_us(1);
			SCL_DAC_HIGH();
			//delay_us(1);
			ValueToWrite <<= 1;	
		}
	}
	CS_DAC_HIGH();       //Ò»´ÎÊäÈëÍê±Ï
	//LDAC_DAC_LOW();
}





  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

drop in the sea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值