STM32驱动-ads1112

汇总一系列AD/DA的驱动程序
ads1112.c
#include "ads1112.h"
#include "common.h"void AD5726_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC, ENABLE );//PORTA、D时钟使能 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHzGPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_SetBits(GPIOA,GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHzGPIO_Init(GPIOC, &GPIO_InitStructure); //根据设定参数初始化GPIOB.9GPIO_ResetBits(GPIOC,GPIO_Pin_4);
} //初始化时,输出电压在中位值,也就是-2.5V---+2.5V中间的0值
//输出的范围由硬件设计决定,详情可以参考ADI公司的datasheet
void AD5726OUT_Init(void)
{AD5726_Init();AD5726_LDAC_L();AD5726_CS_H();AD5726_CLR_L();AD5726_CLRSEL_H();
}
//模拟SPI通信,方便移植到不同的平台
//input格式:A1 A0 X X D11-----D0
//A1-A0真值表:00--CHA 01--CHB 10--CHC 11--CHD
//CLR-CLRSEL真值表:00--12位寄存器的值为0x000,01--12位寄存器的值为0x800,10和11--12位寄存器不做修改
void SPIWriteByte(u16 data)
{u8 i;AD5726_CLR_H();Delay_us(5);AD5726_LDAC_H();Delay_us(5);AD5726_CLK_H();AD5726_CS_H();Delay_us(1);AD5726_CS_L();Delay_us(1);for(i =0; i<16; i++){ AD5726_CLK_L(); Delay_us(1); if(data&0x8000)AD5726_DIN_H();elseAD5726_DIN_L();AD5726_CLK_H();Delay_us(1);data<<=1;}AD5726_CS_H();Delay_us(1);AD5726_LDAC_L();Delay_us(5);AD5726_LDAC_H();Delay_us(1);
}
void ChannelAOut(uint16_t dac)
{u16 xx = dac;xx=xx&0x0FFF;SPIWriteByte(xx);
}
void ChannelBOut(uint16_t dac)
{u16 xx = dac;xx=0x4000+(xx&0x0FFF);SPIWriteByte(xx);
}
void ChannelCOut(uint16_t dac)
{u16 xx = dac;xx=0x8000+(xx&0x0FFF);SPIWriteByte(xx);
}
void ChannelDOut(uint16_t dac)
{u16 xx = dac;xx=0xC000+(xx&0x0FFF);SPIWriteByte(xx);
}
ads1112.h
#ifndef __ADS1112_H
#define __ADS1112_H
#include "stm32f10x.h" //LDAC功能描述,当引脚为H时为锁定状态,DAC寄存器的内容不能改变。为L时,寄存器的内容可以改变
//CLRSEL功能描述,确定“CLR非”的动作,如果是高电平 ,将使用一个清除命令将内部DAC寄存器设置成中间值(0X800)。如果是低电平,寄存器将被设置成零(0X000)。
#define AD5726_CS_H() GPIO_SetBits(GPIOA,GPIO_Pin_4 )
#define AD5726_CLK_H() GPIO_SetBits(GPIOA,GPIO_Pin_5 )
#define AD5726_DIN_H() GPIO_SetBits(GPIOA,GPIO_Pin_7 )
#define AD5726_CLRSEL_H() GPIO_SetBits(GPIOA,GPIO_Pin_1 )
#define AD5726_CLR_H() GPIO_SetBits(GPIOA,GPIO_Pin_6 )
#define AD5726_LDAC_H() GPIO_SetBits(GPIOC,GPIO_Pin_4 )#define AD5726_CS_L() GPIO_ResetBits(GPIOA,GPIO_Pin_4 )
#define AD5726_CLK_L() GPIO_ResetBits(GPIOA,GPIO_Pin_5 )
#define AD5726_DIN_L() GPIO_ResetBits(GPIOA,GPIO_Pin_7 )
#define AD5726_CLRSEL_L() GPIO_ResetBits(GPIOA,GPIO_Pin_1 )
#define AD5726_CLR_L() GPIO_ResetBits(GPIOA,GPIO_Pin_6 )
#define AD5726_LDAC_L() GPIO_ResetBits(GPIOC,GPIO_Pin_4 )void AD5726_Init(void);
void AD5726OUT_Init(void);
void ChannelAOut(uint16_t dac);
void ChannelBOut(uint16_t dac);
void ChannelCOut(uint16_t dac);
void ChannelDOut(uint16_t dac);
#endif
相关文章:
STM32驱动-ads1112
汇总一系列AD/DA的驱动程序 ads1112.c #include "ads1112.h" #include "common.h"void AD5726_Init(void) {GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC, ENABLE );//PORTA、D时钟使能 G…...
数据结构与算法高频面试题
初级面试题及详细解答 当涉及到数据结构与算法的初级面试题时,通常涉及基本的数据结构操作、算法复杂度分析和基本算法的应用。 1. 什么是数组?数组和链表有什么区别? 解答: 数组:是一种线性数据结构,用…...
uni-app的showModal提示框,进行删除的二次确认,可自定义确定或取消操作
实现效果: 此处为删除的二次确认示例,点击删除按钮时出现该提示,该提示写在js script中。 实现方式: 通过uni.showModal进行提示,success为确认状态下的操作自定义,此处调用后端接口进行了删除操作&#…...
5款提高工作效率的免费工具推荐
SimpleTex SimpleTex是一款用于创建和编辑LaTeX公式的简单工具。它能够识别图片中的复杂公式并将其转换为可编辑的数据格式。该软件提供了一个直观的界面,用户可以在编辑LaTeX代码的同时实时预览公式的效果,无需额外的编译步骤。此外,SimpleT…...
区块链的技术架构:节点、网络和数据结构
区块链技术听起来很高大上,但其实它的核心架构并不难理解。今天我们就用一些简单的例子和有趣的比喻,来聊聊区块链的技术架构:节点、网络和数据结构。 节点:区块链的“细胞” 想象一下,区块链就像是一个大型的组织&a…...
pdfmake不能设置表格边框颜色?
找到pdfmake>build>pdfmake.js中: 找到定义的“TableProcessor.prototype.drawVerticalLine”和“TableProcessor.prototype.drawHorizontalLine”两个方法: 重新定义borderColor: var borderColor this.tableNode.table.borderColor||"#…...
laravel 使用RabbitMQ作为消息中间件
先搞定环境,安装amqp扩展 确保已安装rabbitmq-c-dev。 比如 可以使用apk add rabbmit-c-dev安装 cd ~ wget http://pecl.php.net/get/amqp-1.10.2.tgz tar -zxf amqp-1.10.2.tgz cd amqp-1.10.2 phpize ./configure make && make install cd ~ rm -rf am…...
web项目打包成可以离线跑的exe软件
目录 引言打开PyCharm安装依赖创建 Web 应用运行应用程序打包成可执行文件结语注意事项 引言 在开发桌面应用程序时,我们经常需要将网页集成到应用程序中。Python 提供了多种方法来实现这一目标,其中 pywebview 是一个轻量级的库,它允许我们…...
BFS:队列+树的宽搜
一、二叉树的层序遍历 . - 力扣(LeetCode) 该题的层序遍历和以往不同的是需要一层一层去遍历,每一次while循环都要知道在队列中节点的个数,然后用一个for循环将该层节点走完了再走下一层 class Solution { public:vector<vec…...
MySQL高级-SQL优化- count 优化 - 尽量使用count(*)
文章目录 1、count 优化2、count的几种用法3、count(*)4、count(id)5、count(profession)6、count(null)7、 count(1) 1、count 优化 MyISAM引擎把一个表的总行数存在了磁盘上,因此执行count(*)的时候会直接返回这个数,效率很高&a…...
python Flask methods
在 Flask 中,app.route() 装饰器用于定义 URL 路由和与之关联的视图函数。当你想指定某个 URL 可以接受哪些 HTTP 方法时,你可以使用 methods 参数。methods 是一个列表,它可以包含任何有效的 HTTP 方法。 Falsk文章中的描述: 链…...
three.js场景三元素
three.js是一个基于WebGL的轻量级、易于使用的3D库。它极大地简化了WebGL的复杂细节,降低了学习成本,同时提高了性能。 three.js的三大核心元素: 场景(Scene) 场景是一个三维空间,是所有物品的容器。可以将…...
Spring AOP(面向切面编程)详解
Spring AOP(面向切面编程)详解 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 什么是Spring AOP? Spring AOP(…...
Kafka第一篇——内部组件概念架构启动服务器zookeeper选举以及底层原理
目录 引入 ——为什么分布式系统需要用第三方软件? JMS 对比 组件 架构推演——备份实现安全可靠 , Zookeeper controller的选举 controller和broker底层通信原理 BROKER内部组件 编辑 topic创建 引入 ——为什么分布式系统需要用第三方软件&#…...
14、顺时针打印矩阵
题目: 顺时针打印矩阵 描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字, 例如, 如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字:1,2,3,4,8,1…...
毅速丨金属3D打印是制造业转型升级的重要技术
随着科技的进步,金属3D打印技术已成为制造业升级的重要驱动力。它以其独特的优势,正引领着制造业迈向新的未来。 金属3D打印技术的突破: 设计自由。金属3D打印能制造任意形状和结构的零件,为设计师提供了无限的创意空间。 快速制…...
uni-app uni-data-picker级联选择器无法使用和清除选中的值
出现问题: 使用点击右边的叉号按钮无法清除已经选择的uni-data-picker值 解决办法: 在uni-app uni-data-picker使用中,要添加v-model,v-model在官网的示例中没有体现,但若不加则无法清除。 <uni-data-picker v-m…...
构造函数的小白理解
一、实例 using System; using System.Collections; using System.Collections.Generic; using UnityEngine;//定义一个名为Question的类,用于存储问题及相关信息 [Serializable] public class Question {public string questionText;//存储题目文本字段public str…...
招聘,短信与您:招聘人员完整指南
招聘人员面临的最大挑战之一就是沟通和联系候选人。为何?我们可以从以下原因开始:候选人通常被太多的招聘人员包围,试图联系他们,这使得你很难吸引他们的注意。在招聘过程的不同阶段,根据不同的工作量,让申请人保持最…...
JAVA-矩阵置零
给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 思路: 找到0的位置,把0出现的数组的其他值夜置为0 需要额外空间方法: 1、定义两个布尔数组标记二维数组中行和列…...
为什么92%的数据分析师还没用上Gemini Sheets功能?—— 一份被谷歌官方忽略的AI分析落地清单
更多请点击: https://intelliparadigm.com 第一章:Gemini Sheets数据分析的现状与认知断层 Gemini Sheets 作为 Google Workspace 生态中新兴的 AI 增强型电子表格工具,正逐步替代传统 Sheets 的部分分析场景。然而,当前用户实践…...
【研报 A110】物理AI时代的具身数据采集需求研究:国家级训练场落地,开源生态加速建设
摘要:物理AI时代,具身智能与世界模型的发展,推动具身数据采集成为下一代数据基建的核心浪潮。具身大模型对数据有着EB级的海量需求,同时对多模态、异构性与质量要求极高,当前数据缺口成为制约具身智能发展的核心瓶颈&a…...
Android本地AI智能家居框架:ZeroClaw架构设计与工程实践
1. 项目缘起与核心愿景几年前,我还在为一个智能家居项目焦头烂额,试图让家里的灯光、空调和音箱能听懂人话,而不是只会执行预设的“回家模式”或“睡眠模式”。当时市面上主流的方案,要么是依赖某个封闭的云平台,所有指…...
告别编译噩梦:在Ubuntu 22.04上为你的C++项目搞定Abseil依赖的三种方法
告别编译噩梦:在Ubuntu 22.04上为你的C项目搞定Abseil依赖的三种方法 在C项目的开发过程中,依赖管理一直是开发者面临的一大挑战。特别是对于现代C项目而言,如何高效、可靠地引入和管理第三方库,往往决定了项目的开发效率和最终质…...
别再死记硬背了!用一张图+代码片段,彻底搞懂Element UI Menu组件的嵌套关系
可视化拆解Element UI菜单组件:从零构建多级导航系统 每次看到Element UI文档里那些层层嵌套的菜单代码,是不是感觉像在解一道复杂的数学题?作为Vue生态中最受欢迎的UI框架之一,Element UI的菜单组件确实功能强大,但初…...
用AI写论文怎么不被判AI?写作prompt+降AI工具双层防御攻略!
用AI写论文怎么不被判AI?写作prompt降AI工具双层防御攻略! 用 AI 写论文最稳的姿势是「双层防御」——写作端用降 AI 提示词预防(0 成本但有能力上限) 写完用降 AI 工具兜底(4.8 元/千字双降到位)。 这两…...
HX711终极指南:如何用24位ADC打造专业级电子秤系统
HX711终极指南:如何用24位ADC打造专业级电子秤系统 【免费下载链接】HX711 An Arduino library to interface the Avia Semiconductor HX711 24-Bit Analog-to-Digital Converter (ADC) for Weight Scales. 项目地址: https://gitcode.com/gh_mirrors/hx/HX711 …...
微信好友关系终极检测:WechatRealFriends帮你一键识别单向好友
微信好友关系终极检测:WechatRealFriends帮你一键识别单向好友 【免费下载链接】WechatRealFriends 微信好友关系一键检测,基于微信ipad协议,看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRealFri…...
告别手动复制!Stata 16/17结果输出保姆级教程:从tabstat到outreg2的避坑指南
Stata高效结果输出实战指南:从基础统计到回归报告的自动化流程 第一次用Stata输出描述统计表时,我盯着屏幕上杂乱的.txt文件发呆——明明在命令窗口看到整齐的表格,保存后却变成了一团乱码。这可能是每个Stata初学者都会经历的挫败时刻。本文…...
别再用filter了!MATLAB bandpass函数一键搞定信号滤波,附音乐合成与降噪实战
别再用filter了!MATLAB bandpass函数一键搞定信号滤波,附音乐合成与降噪实战 信号处理工程师的日常,往往伴随着无数个深夜调试滤波器的痛苦回忆。从设计滤波器系数到手动补偿群延迟,再到反复调整截止频率,传统filter和…...
