DAC8812驱动

DAC8812驱动

#include "dac8812.h"
#include "delay.h"
#include "includes.h"
#include "sys.h"
// DAC_LDAC# -- PB10
// DAC_RST#  -- PB11
// DAC_CS#  	-- PB12
// DAC_SCK  	-- PB13
// DAC_SDI 	-- PB15
// DAC_MSB   -- GND
void DAC8812_Init(void)
{
	GPIO_InitTypeDef GPIO_Initure;

	__HAL_RCC_GPIOB_CLK_ENABLE(); //开启GPIOB时钟

	GPIO_Initure.Pin = GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_15; // PB5
	GPIO_Initure.Mode = GPIO_MODE_OUTPUT_PP;												//推挽输出
	GPIO_Initure.Pull = GPIO_PULLUP;														//上拉
	GPIO_Initure.Speed = GPIO_SPEED_FREQ_HIGH;												//高速
	HAL_GPIO_Init(GPIOB, &GPIO_Initure);
	//复位DAC8812
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10 | GPIO_PIN_12, GPIO_PIN_SET); // DAC_LDAC# DAC_CS# 拉高
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_11, GPIO_PIN_RESET);			   // DAC_RST# 拉低
}

void DAC8812_UpdateOutput(uint32_t TxData)
{
	OS_CPU_SR cpu_sr = 0;
	uint8_t i = 0;
	OS_ENTER_CRITICAL(); //进入临界区(关闭中断)
	//准备
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10 | GPIO_PIN_11, GPIO_PIN_SET); // DAC_LDAC# DAC_RST# 拉高
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);			   // DAC_CS#拉低

	// HAL_SPI_TransmitReceive(&SPI2_Handler,&TxData,&Rxdata,1, 1000);
	for (i = 0; i < 18; i++)
	{
		HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);						// DAC_SCK 准备产生时钟上升沿,预拉低
		HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, (GPIO_PinState)((TxData >> (17 - i)) & GPIO_PIN_SET)); // DAC_SDI 从机数据输入
		HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);						// DAC_SCK 拉高,产生上升沿,传输数据
	}
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET); // DAC_SCK 拉低
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);   // DAC_CS# 拉高, CS 产生上升沿将shift register数据保存到DAC register中
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_RESET); // DAC_LDAC# 拉低 将DAC register中数据变成模拟输出
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_SET);   // DAC_LDAC# 拉高 LDAC 产生上升沿将输出锁存

	OS_EXIT_CRITICAL(); //退出临界区(开中断)
}

#ifndef __ADC8812_H__
#define __ADC8812_H__
#include "sys.h"

//DAC_LDAC# -- PB10
//DAC_RST#  -- PB11
//DAC_CS#  	-- PB12
//DAC_SCK  	-- PB13 
//DAC_SDI 	-- PB15
//DAC_MSB   -- GND
void DAC8812_Init(void);
void DAC8812_UpdateOutput(uint32_t TxData);

#endif




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值