基于STM32的ADS1230驱动例程

embedded/2025/2/12 17:00:46/

自己在练手项目中用到了ADS1230,根据芯片手册自写的驱动代码,已测可用,希望对将要用到ADS1230芯片的人有所帮助。

芯片:STM32系列任意芯片、ADS1230

环境:使用STM32CubeMX配置引脚、KEIL

部分电路:

代码:

ads1230.h

#ifndef __ADS1230_H__
#define __ADS1230_H__#include "gpio.h"// 移植时改为对应引脚即可
// 控制AD开关 (PDWN引脚)              
#define AD_ON()                 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,GPIO_PIN_SET)               
#define AD_OFF()                HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,GPIO_PIN_RESET)// 控制数据传输速率(SPEED引脚)
#define AD_SPEED_H()			HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15,GPIO_PIN_SET)
#define AD_SPEED_L()			HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15,GPIO_PIN_RESET)// 控制时钟信号(SCLK引脚)
#define ADS1_CLK_H()             HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,GPIO_PIN_SET)
#define ADS1_CLK_L()             HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,GPIO_PIN_RESET)// 读一位数据(DOUT引脚)
#define ADS1_RD_DATA             HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_4)// 获取当前mv值
void readADS1230(double* signal_mv); #endif

 ads1230.c

#include "ads1230.h"
#include "main.h"
void readADS1230(double* signal_mv)
{int ADdatatemp1=0;                      uint8_t mv1_flag = 0 ;     // 用来判断正负的标志位while(ADS1_RD_DATA);       // 等待数据准备好for(uint8_t i = 0;i < 20;i ++)    // 读取20位数据        {ADdatatemp1 = ADdatatemp1 << 1;ADS1_CLK_H();          // 发送一个时钟信号ADS1_CLK_L();	if( i == 0 )           // 读第一位数据,判断正负{if(ADS1_RD_DATA)                     {ADdatatemp1 ++;mv1_flag++;}ADdatatemp1 = ADdatatemp1 << 11;}else{if(mv1_flag){if(!ADS1_RD_DATA)                    {ADdatatemp1 ++;}}else{if(ADS1_RD_DATA)                    {ADdatatemp1 ++;}}	}}    if(!mv1_flag)ADdatatemp1++;    // 负数最后要加1for(uint8_t i=0;i<6;i++)       // 额外发送6个时钟信号用来校准{ADS1_CLK_H();ADS1_CLK_L();}*signal_mv =( 19.53125f / 524287.0f )*ADdatatemp1;    // 计算mv值return;
}

使用方法:

// 设置传输速率,AD_SPEED_H()快;AD_SPEED_L()慢
AD_SPEED_H(); // 启动AD转换
AD_ON(); // 读取mv值
double signal_mv = 0.00f;
while(1)
{readADS1230(&signal_mv);// printf("-- 当前mv值 %.4f --\n",signal_mv);
}


http://www.ppmy.cn/embedded/161644.html

相关文章

【C++指南】解锁C++ STL:从入门到进阶的技术之旅

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《C指南》 期待您的关注 目录 一、STL 是什么 二、STL 的核心组件 2.1 容器&#xff08;Containers&#xff09; 2.2 算法&…

ES数据压缩、解压调研测试

ES数据压缩、解压调研测试 设置 best_compression 压缩方式 所占磁盘空间 查询速度(解压) 设置默认压缩方式(LZ4) 所占磁盘空间 5分钟后压缩再次触发 变为149M 查询速度(解压) 结论 针对压缩来说&#xff0c;压缩触发的因素不单纯是数据落到ES就开始压缩&#xff0c…

使用 PDF SDK 通过页面分割和数据提取对建筑图纸进行分类

一家专门从事设计和建设的建筑公司对大量多页建筑 PDF 图纸进行分类&#xff0c;从而提高协作和运营效率。 这类公司通常承担多个建筑设计项目&#xff0c;每个项目包含多个设计图纸&#xff0c;如详细的结构计划、电气与水管计划、机械计划等。如果项目图纸可以在上传后自动分…

Python:凯撒密码

题目内容&#xff1a; 凯撒密码是古罗马恺撒大帝用来对军事情报进行加密的算法&#xff0c;它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列该字符后面第三个字符&#xff0c;对应关系如下&#xff1a; 原文&#xff1a;A B C D E F G H I J K L M N O P Q R …

在win11下配置QT存在问题

原来使用版本为5.12.12&#xff0c;因为版本原因导致不能上架&#xff0c;遂决定升级&#xff0c;但大版本的升级与相像的差别还是很大的&#xff0c;且不说从qmake转到cmake和内部的一些使用差别&#xff0c;只说这个环境的搭建&#xff0c;就成了一个坎儿&#xff0c;到现在还…

力扣——【2149. 按符号重排数组】

#创新点 1、创新&#xff1a;“#”后为原始思路&#xff0c;在题解中&#xff0c;提供了一个新代码&#xff0c;可以少创建一个列表 nums[::2],nums[1::2]a,b 2、创新&#xff1a;在修改后的基础上&#xff0c;可以再减少一个列表的创建&#xff0c;即使用一个for循环&#…

Spring Boot应用开发

Spring Boot 是一个用于简化 Spring 应用程序开发的框架,它提供了一种快速、方便的方式来创建独立的、生产级的 Spring 应用。以下是 Spring Boot 应用开发的基本步骤和一些重要概念。 1. 环境准备 JDK: 确保安装了 JDK 8 或更高版本。 IDE: 推荐使用 IntelliJ IDEA、Eclips…

AI基础 -- AI学习路径图

人工智能从数学到大语言模型构建教程 第一部分&#xff1a;AI 基础与数学准备 1. 绪论&#xff1a;人工智能的过去、现在与未来 人工智能的定义与发展简史从符号主义到统计学习、再到深度学习与大模型的变迁本书内容概览与学习路径指引 2. 线性代数与矩阵运算 向量与矩阵的…