/****************************************************************************
*
* stm32f1xx_hal_conf.h 打开模块功能 定义
*
****************************************************************************/
#include "DAC8554.h"
/*
** 函数功能: DAC8554 引脚初始化
** 输入参数: 无
** 返 回 值: 无
** 说 明: 无
*/
extern void DAC8554_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Pin = SYNCPin | LDACPin | ENABLEPin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
GPIO_InitStruct.Pin = SCLKPin | DINPin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
/*
** 函数功能: DAC8554 写通道数据
** 输入参数: cmd: 加载命令, ch: 通道ABCD, isPowerdown: 是否是掉电模式 1 YES 0 NO, data: 数据
** 返 回 值: 无
** 说 明:
** 数据帧格式:
** DB23 DB0
** A1 A0 LD1 LD0 X DACSelect1 DACSelect0 PD0 D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
**
** A1 A0: 地址 0 0 PD0: 选择DAC8554通道的掉电模式 掉电标志
** LD1 LD0 加载命令 DACSelect1 DACSelect0 PD0 PD1 PD2
** 0 0 单通道存储 0 0 DAC A 1 0 0 输出高阻抗
** 0 1 单通道更新 0 1 DAC B 1 0 1 输出 1K 到 GND
** 1 0 同时更新 1 0 DAC C 1 1 0 输出 100K 到 GND
** 1 1 广播更新 1 1 DAC D 1 1 1 输出高阻抗
** X : 无关位, 取 0
** 前 8 位控制位, 后 16 位数据位
*/
#define isInvert 1 // 倒置反向
extern void DAC8554_Write_ch_data(uint8_t cmd, uint8_t ch, uint8_t isPowerdown, uint16_t data)
{
uint8_t i =0x0;
uint8_t tmpCmd =0x00;
uint32_t sData =0x0;
tmpCmd = ((cmd & 0x03) <<4) | ((ch & 0x03) <<1) | ((isPowerdown & 0x01) <<0); // 获取控制位
if( ChPower_down_ON == isPowerdown ) data &= 0xC000; // 判断数据位
#if (1 == isInvert)
sData = ((uint8_t)(~tmpCmd) <<16) | (uint16_t)(~data); // 反向数据
#else
sData = (tmpCmd <<16) | data; // 正常数据
#endif
/* 输入数据的帧同步信号, SYNC变为低电平时, 使能输入移位寄存器, 并在 随后的时钟的下降沿传输数据 */
/* EN低电平有效, 低电平有效 将SPI接口连接到串行端口 */
#if (1 == isInvert)
oSYNC_0;
oENABLE_1;
oSYNC_1;
#else
oSYNC_1;
oENABLE_0;
oSYNC_0;
#endif
for( i =0; i <24; i++ ) // 24位数据: 8位控制位 + 16位数据位
{
if( 0x800000 ==(sData & 0x800000) ) oDIN_1;
else oDIN_0;
#if (1 == isInvert)
oSCLK_0;
__NOP();__NOP();
oSCLK_1;
#else
oSCLK_1;
__NOP();
oSCLK_0;
#endif
sData = sData << 1;
}
/* 在上升沿触发时加载所有DAC寄存器 */
#if (1 == isInvert)
oLDAC_1;
__NOP();
oLDAC_0;
oENABLE_0;
#else
oLDAC_0;
__NOP();
oLDAC_1;
oENABLE_1;
#endif
}
DAC8554_dac8554代码_DAC8564_DAC8554驱动_DAC8554
版权申诉
5星 · 超过95%的资源 25 浏览量
2021-09-11
10:16:41
上传
评论
收藏 2KB RAR 举报
心梓
- 粉丝: 811
- 资源: 8057
最新资源
- 论文(最终)_20240430235101.pdf
- 基于python编写的Keras深度学习框架开发,利用卷积神经网络CNN,快速识别图片并进行分类
- 最全空间计量实证方法(空间杜宾模型和检验以及结果解释文档).txt
- 5uonly.apk
- 蓝桥杯Python组的历年真题
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 前端开发技术实验报告:内含4四实验&实验报告
- Highlight Plus v20.0.1
- 林周瑜-论文.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈