当前位置: 首页 > article >正文

基于STM32的ADS1230驱动例程

自己在练手项目中用到了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++;    // 负数最后要加1
		
	for(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.kler.cn/a/543995.html

相关文章:

  • 19.3 连接数据库
  • 验证MoEG模型的可行性,建立初步的技术框架和实验基础
  • HTTP3原理解析和实战应用
  • VMware Windows_10_x64 安装 VM Tools 后无法将本机文件复制到虚拟机
  • Vue3.5 企业级管理系统实战(六):Vue3中defineProps用法
  • Android Studio集成讯飞SDK过程中在配置Project的时候有感
  • 01、单片机上电后没有正常运行怎么办
  • docker快速部署oracle11g
  • Android10 Framework系列 需求定制(一)修改按键映射相关,顺便看了看按键事件分发
  • 上位机知识篇---SSHSCP密钥与密钥对
  • PostgreSQL DISTINCT 关键字详解
  • Rust 中的闭包:捕获环境的匿名函数
  • stm32的低功耗功能
  • AI语言模型的技术之争:DeepSeek与ChatGPT的架构与训练揭秘
  • Git的常用命令及常见问题处理方法
  • git 提示 fatal: The remote end hung up unexpectedly
  • DeepSeek的出现会对百度有多大影响?
  • 基于深度学习的半导体良率提升与工艺优化策略研究
  • 23种设计模式的定义和应用场景-C#代码-汇总
  • 【NLP】第十一章:隐马尔可夫模型 HMM (Hidden Markov Model)
  • 模糊数学模型:基础概念
  • 软考高级《系统架构设计师》知识点(二)
  • 模糊模式识别:从贴近度到分类决策的Matlab实践
  • 优选驾考小程序
  • 逻辑回归不能解决非线性问题,而svm可以解决
  • conda的创建