扁平 网站 模板,中国镇江网,北京十大装饰公司排名有哪些,长沙建网站理自己在练手项目中用到了ADS1230#xff0c;根据芯片手册自写的驱动代码#xff0c;已测可用#xff0c;希望对将要用到ADS1230芯片的人有所帮助。
芯片#xff1a;STM32系列任意芯片、ADS1230
环境#xff1a;使用STM32CubeMX配置引脚、KEIL
部分电路#xff1a; 代码…自己在练手项目中用到了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); #endifads1230.c
#include ads1230.h
#include main.h
void readADS1230(double* signal_mv)
{int ADdatatemp10; 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 i0;i6;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;
while1
{readADS1230(signal_mv);// printf(-- 当前mv值 %.4f --\n,signal_mv);
}