STM32 HAL库 模拟SPI驱动 DAC8560
2025-10-27 来源:bilibili
网上关于DAC8560相关的模拟SPI驱动的资料少的可怜,甚至连DAC8560的中文资料都不多,更不要提用HAL库进行编程的了,这实在是一块冷门芯片,本文主要是介绍讲解STM32 HAL库使用模拟SPI驱动DAC8560。
首先是SPI相关的简介:
SPI通信 高冠避役 · 800阅读
然后是用STM32CubeMx初始化模拟SPI的引脚:

STM32CubeMx的GPIO输出的配置可以参考:
STM32CubeMx GPIO口输出 高冠避役 · 960阅读
这里之所以是只用开三个GPIO输出来模拟SPI是因为它只用到了半双工通信。
我所用到的三个输出口分别对应8560上的三个SPI通信口。
SYNC:PA6
SCLK:PA7
DIN:PC4
在实际的应用中可以自行修改头文件中的GPIO口以配合硬件完成工程。
DAC8560 datasheet:
https://www.ti.com/lit/ds/symlink/dac8560.pdf

SYNC:CS 片选线
SCLK:SCLK 时钟线,用于时钟同步
DIN:DIN(MOSI) 输出24位信号的数据线

这里我们就可以看到DAC8560是时钟下降沿触发的



按照正常使用的方法,我们需要输出24位的数据。前8位中前6位始终置零,前8位的最后两位是控制电阻的(我们正常使用全部置零),后16位则是0x0000(0V)~0xffff(2.5V)对应的电压值,其中0x0000输出0V、0xffff输出2.5V,两者之中的分为65535份。
user_dac8560.h
配合硬件修改对应的IO口
#ifndef __USER_DAC8560_H
#define __USER_DAC8560_H
#ifdef __cplusplus
extern 'C' {
#endif
#include 'main.h'
#define CS_H HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET)
#define CS_L HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET)
#define SCLK_H HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_SET)
#define SCLK_L HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET)
#define DIN_H HAL_GPIO_WritePin(GPIOC, GPIO_PIN_4, GPIO_PIN_SET)
#define DIN_L HAL_GPIO_WritePin(GPIOC, GPIO_PIN_4, GPIO_PIN_RESET)
void WriteDac8560(uint32_t Data);
#ifdef __cplusplus
}
#endif
#endif
user_dac8560.c
24位从高到低通过移位的方法依次发出,发送这24位前我们需要先拉低CS,在发送完成后再拉高。
注意:由于是下降沿触发因此我们需要先移位再拉低时钟
#include 'user_dac8560.h'
#include /**
* 函数名称:DAC8560写函数
* 函数功能:给DAC8560发数据
* 形 参:dac值
* 返回值 :无
*/
void WriteDac8560(uint32_t Data)
{
SCLK_H;
DIN_L;
CS_H;
HAL_Delay(1);
CS_L;
for(uint8_t i = 0; i < 24;i++)
{
SCLK_H;
if(Data & 0x800000)
DIN_H;
else
DIN_L;
Data<<=1;
SCLK_L;
}
CS_H;
HAL_Delay(1);
DIN_L;
}
使用示例
WriteDac8560(0x8888); // 输出(0x8888/0xffff)*2.5V=1.25V
参考文献:
具有 2.5V、2ppm/°C 基准的 16 位、单通道、低功耗、超低干扰、电压输出 DAC:
https://www.ti.com.cn/product/cn/DAC8560
- 意法半导体中国本地造STM32微控制器启动规模量产
- 意法半导体全新STM32C5系列,重新定义入门级微控制器性能与价值,赋能万千智能设备
- 使用 Keil Studio for Visual Studio Code开发 STM32 设备
- 基于机智云与STM32的智能拐杖安全监测系统在养老物联网中的应用
- 内置全栈安全,一站式满足CRA法案与IEC 62443标准——米尔STM32MP257核心板
- 如何用 STM32 FLASH 实现等效 100 万次擦写的 EEPROM 功能?
- 实战解析:通过一个小项目掌握STM32所有外设
- STM32学了两年半,却还是不会做项目
- 意法半导体推出最新STM32MP21微处理器,兼具高性价比、低功耗、高灵活性
- 基于STM32的矿井作业环境监测系统设计与实现
- 六大全新产品系列推出,MCX A微控制器家族迎来创新
- 意法半导体全新STM32C5系列,重新定义入门级微控制器性能与价值,赋能万千智能设备
- 从控制到系统:TI利用边缘AI重塑嵌入式MCU的边界
- 模组复用与整机重测在SRRC、CCC、CTA/NAL认证中的实践操作指南
- 有源晶振与无源晶振的六大区别详解
- 英飞凌持续巩固全球微控制器市场领导地位
- 使用 Keil Studio for Visual Studio Code开发 STM32 设备
- 蓝牙信道探测技术原理与开发套件实践
- LoRa、LoRaWAN、NB-IoT与4G DTU技术对比及工业无线方案选型分析
- Microchip 推出生产就绪型全栈边缘 AI 解决方案,赋能MCU和MPU实现 智能实时决策




