驱动开发:STM32F7控制AD5663模拟量输出

AD5663是ADI公司的一款DAC模块,用以实现两路模拟量信号输出。该芯片通过SPI通信来驱动。下面讲解使用STM32F7主控芯片来控制AD5663模拟量输出的流程。

配置STM32F7 SPI通信管脚

STM32CubeMX生成SPI驱动代码

/* SPI3 init function */
void MX_SPI3_Init(void)
{/* USER CODE BEGIN SPI3_Init 0 *//* USER CODE END SPI3_Init 0 *//* USER CODE BEGIN SPI3_Init 1 *//* USER CODE END SPI3_Init 1 */hspi3.Instance = SPI3;hspi3.Init.Mode = SPI_MODE_MASTER;hspi3.Init.Direction = SPI_DIRECTION_2LINES;hspi3.Init.DataSize = SPI_DATASIZE_8BIT;hspi3.Init.CLKPolarity = SPI_POLARITY_LOW;hspi3.Init.CLKPhase = SPI_PHASE_2EDGE;hspi3.Init.NSS = SPI_NSS_SOFT;hspi3.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;hspi3.Init.FirstBit = SPI_FIRSTBIT_MSB;hspi3.Init.TIMode = SPI_TIMODE_DISABLE;hspi3.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;hspi3.Init.CRCPolynomial = 7;hspi3.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;hspi3.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;if (HAL_SPI_Init(&hspi3) != HAL_OK){Error_Handler();}/* USER CODE BEGIN SPI3_Init 2 *//* USER CODE END SPI3_Init 2 */}

AD5663驱动代码开发

头文件io.h

#ifndef __IO_H__
#define __IO_H__#ifdef __cplusplus
extern "C" {
#endif/* Includes ------------------------------------------------------------------*/
#include "gpio.h"/* USER CODE BEGIN Includes *//* USER CODE END Includes *//* USER CODE BEGIN Private defines *//* USER CODE END Private defines */
/* USER CODE BEGIN Prototypes *//*ÃüÁÒå*/
#define Write_to_Input_Register         0x000000
#define Update_DAC_Register             0x080000
#define Software_LDAC                   0x100000
#define WriteTo_Update_DAC_Channel      0x180000
#define Power_Down                      0x200000
#define RESET                           0x280000
#define LDAC_Register_Setup             0x300000
#define Reference_Set                   0x380000/*µØַģʽ,Ñ¡ÔñDACͨµÀ*/
#define DAC_Channel_A                   0x000000
#define DAC_Channel_B                   0x010000
#define DAC_Channel_All                 0X070000//FOR POWER DOWN
#define NORMAL                     0X00
#define K1Ohm                      0X10
#define K100Ohm                    0X20
#define ThreeState                 0X30#define PDACA                      0X01
#define PDACB                      0X02typedef enum
{AOUT1 = 0,AOUT2  = 1,
} AOUT_NAME;extern void IO_Initialize(void);
extern void Set_AOUT_Level(AOUT_NAME aout, uint16_t level);
extern void IO_Function_Test(void);

源文件io.c

#include <string.h>
#include "io.h"
#include "spi.h"
#include "usart.h"/*Global variables*/
uint16_t Aout1, Aout2;static void AD5663_PowerDown(void)
{uint32_t inputShiftData = 0;uint8_t SendSPIByte[3];inputShiftData = Power_Down| NORMAL | PDACA | PDACB;SendSPIByte[0] = inputShiftData>>16;SendSPIByte[1] = inputShiftData>>8;SendSPIByte[2] = inputShiftData;HAL_GPIO_WritePin(DA_SYNC_GPIO_Port, DA_SYNC_Pin, GPIO_PIN_RESET);HAL_SPI_Transmit(&hspi3, SendSPIByte, sizeof(SendSPIByte), 100);HAL_GPIO_WritePin(DA_SYNC_GPIO_Port, DA_SYNC_Pin, GPIO_PIN_SET);
}void IO_Initialize(void)
{AD5663_PowerDown();
}void Set_AOUT_Level(AOUT_NAME aout, uint16_t level)
{uint32_t inputShiftData = 0;uint8_t SendSPIByte[3];if(aout == AOUT1){Aout1 = level;inputShiftData = WriteTo_Update_DAC_Channel | DAC_Channel_A | level;}else if(aout == AOUT2){Aout2 = level;inputShiftData = WriteTo_Update_DAC_Channel | DAC_Channel_B | level;}SendSPIByte[0] = inputShiftData>>16;SendSPIByte[1] = inputShiftData>>8;SendSPIByte[2] = inputShiftData;HAL_GPIO_WritePin(DA_SYNC_GPIO_Port, DA_SYNC_Pin, GPIO_PIN_RESET);HAL_SPI_Transmit(&hspi3, SendSPIByte, sizeof(SendSPIByte), 100);HAL_GPIO_WritePin(DA_SYNC_GPIO_Port, DA_SYNC_Pin, GPIO_PIN_SET);
}void IO_Function_Test(void)
{Set_AOUT_Level(AOUT1, 0x8000);Set_AOUT_Level(AOUT2, 0xEFFF);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/145452.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

阿里巴巴OceanBase介绍

前言 官网地址&#xff1a;https://www.oceanbase.com/ OceanBase是由蚂蚁集团完全自主研发的国产原生分布式数据库&#xff0c;始创于2010年。是全球唯一在 TPC-C 和 TPC-H 测试上都刷新了世界纪录的国产原生分布式数据库。 2010年&#xff0c;创始人阳振坤加入阿里巴巴&…

UE5屏幕适配

一、本程序设计发布在手机上&#xff0c;首先确定屏幕的设计分辨率&#xff0c;这里我们选择iphone6s&#xff0c;750x1334。 二、设置DPI Scale为1.0的比例&#xff0c;点击齿轮标志 因为我们这个程序是手机竖屏使用的&#xff0c;所以DPI Scale Rule选择Shortest Side&#…

博弈论中静态博弈经典场景案例

博弈论中静态博弈经典场景案例 1、齐威王田忌赛马 田忌赛马是中国家喻户晓的故事&#xff0c;故事讲述的是齐国大将田忌的谋士孙膑如何运用计谋帮助田忌在与齐威王赛马时以弱胜强的故事&#xff0c;这个故事其实本质也是一个博弈的过程。     齐威王要和田忌赛马&#xff…

【MySQL】数据类型(二)

文章目录 一. char字符串类型二. varchar字符串类型2.1 char和varchar比较 三. 日期和时间类型四. enum和set类型4.1 set的查询 结束语 一. char字符串类型 char (L) 固定长度字符串 L是可以存储的长度&#xff0c;单位是字符&#xff0c;最大长度是255 MySQL中的字符&#xff…

CocosCreator3.8研究笔记(二十三)CocosCreator 动画系统-动画编辑器相关功能面板说明

国庆假期&#xff0c;闲着没事&#xff0c;在家研究技术~ 上一篇&#xff0c;我们介绍了动画剪辑、动画组件以及基本的使用流程&#xff0c;感兴趣的朋友可以前往阅读&#xff1a; CocosCreator 动画系统-动画剪辑和动画组件介绍。 今天&#xff0c;主要介绍动画编辑器相关功能…

【图论C++】树的重心——教父POJ 3107(链式前向星的使用)

》》》算法竞赛 /*** file * author jUicE_g2R(qq:3406291309)————彬(bin-必应)* 一个某双流一大学通信与信息专业大二在读 * * brief 一直在竞赛算法学习的路上* * copyright 2023.9* COPYRIGHT 原创技术笔记&#xff1a;转载…

腾讯mini项目-【指标监控服务重构-会议记录】2023-07-21

2023-07-21 组长会议纪要 A组 文档学习差不多&#xff0c;还没掌握如何使用sdk进行上报venus启动服务的3个ToDo 添加什么错误处理 ErrHandler &#xff1a; fiber的错误处理&#xff0c;是运行过程Handler中的错误&#xff0c;在全局的ErrHandler&#xff0c;进行错误处理&am…

app专项测试:app弱网测试

背景 用户体验 APP使用过程中&#xff0c;弱网的高延迟和高丢包&#xff0c;在实时性要求非常高的场景&#xff0c;容易伤害用户体验 非正常情况下&#xff0c;Bug出现几率会增加 在解决日常支持需求中&#xff0c;经常出现一些用户反馈的Bug无法复现&#xff0c;有很大部分…

线性代数(七) 矩阵分析

前言 从性线变换我们得出&#xff0c;矩阵和函数是密不可分的。如何用函数的思维来分析矩阵。 矩阵的序列 通过这个定义我们就定义了矩阵序列的收敛性。 研究矩阵序列收敛性的常用方法&#xff0c;是用《常见向量范数和矩阵范数》来研究矩阵序列的极限。 长度是范数的一个特…

三翼鸟三周年:三次升级,全面引领

被誉为“竞争战略之父”的迈克尔波特&#xff0c;曾提出过“差异化竞争”的理念。 简单说&#xff0c;企业在“差异化竞争”中要做到三大法则&#xff1a; 人无我有、人有我优、人有我新。 在许多优秀企业的身上&#xff0c;都能看到差异化的影子&#xff0c;比如华为、海尔…

CentOS 7 安装 Docker 的详细步骤

文章目录 Docker简介1.更新2.安装必要的软件包3.添加Docker仓库4.安装5.安装后的一些常规设置及常用的命令5.1 启动 Docker5.2 Docker 在系统启动时自动运行5.3 运行一个 Hello World 镜像5.4 查看docker运行状态5.5 docker ps5.6 查看docker版本 6.安装种常见的错误错误1:yum-…

黑马程序员Docker快速入门到项目部署(学习笔记)

目录 一、Docker简介 二、安装Docker 2.1、卸载旧版 2.2、配置Docker的yum库 2.3、安装Docker 2.4、启动和校验 2.5、配置镜像加速 2.5.1、注册阿里云账号 2.5.2、开通镜像服务 2.5.3、配置镜像加速 三、快速入门 3.1、部署MYSQL 3.2、命令解读 四、Docker基础 …

【分布式云储存】Springboot微服务接入MinIO实现文件服务

文章目录 前言技术回顾准备工作申请accessKey\secretKey创建数据存储桶公共资源直接访问测试 接入springboot实现文件服务依赖引入配置文件MinIO配置MinIO工具类 OkHttpSSLSocketClient兼容ssl静态资源预览解决方案资源上传预览测试测试结果 前言 上篇博客我们介绍了分布式云存…

day06_循环

今日内容 零、 复习昨日 一、循环 二、流程控制关键词 零、 复习昨日 8个基本数据类型 变量的使用步骤 1)声明2)赋值3)使用 声明,数据类型 变量名 不一定非得是基本类型 int a; String s; Scanner scanner;赋值,只要符合类型(能默认转换)就能赋值 int a 1; double d 1; Scann…

【KingbaseES】银河麒麟V10 ARM64架构_安装人大金仓数据库KingbaseES_V8R6(CentOS8)

&#x1f341; 博主 "开着拖拉机回家"带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——&#x1f390;开着拖拉机回家_Linux,Java基础学习,大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341; 希望本文能够给您带来一定的…

基于Java的毕业设计管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

云部署家里的服务器

1.固定静态ip 查看ip地址&#xff0c;en开头的 ifconfig查看路由器ip&#xff0c;via开头的 ip route修改配置文件 cd /etc/netplan/ #来到这个文件夹 sudo cp 01-network-manager-all.yaml 01-network-manager-all.yaml.bak #先备…

excel筛选后求和

需要对excel先筛选&#xff0c;后对“完成数量”进行求和。初始表格如下&#xff1a; 一、选中表内任意单元格&#xff0c;按ctrlshiftL&#xff0c;开启筛选 二、根据“部门”筛选&#xff0c;比如选择“一班” 筛选完毕后&#xff0c;选中上图单元格&#xff0c;然后按alt后&…

泰国数字加密平台Bitkub创始人到访和数集团:以数字化创新探索科技前沿密码

9月21日&#xff0c;泰国数字加密货币交易平台Bitkub创始人兼首席执行官&#xff08;CEO&#xff09;Jirayut Srupsrisopa (Topp)先生到访上海和数集团&#xff0c;在和数集团董事长唐毅陪同下实地参观了和数集团上海总部&#xff0c;听取了和数集团在引领前沿数字化创新&#…

【跟小嘉学习区块链】二、Hyperledger Fabric 架构详解

系列文章目录 【跟小嘉学习区块链】一、区块链基础知识与关键技术解析 【跟小嘉学习区块链】二、区块链基础知识与关键技术解析 文章目录 系列文章目录[TOC](文章目录) 前言一、Hyperledger 社区1.1、Hyperledger(面向企业的分布式账本)1.2、Hyperledger社区组织结构 二、Hype…