资源简介
这是本人参考网上的资源和老师给的代码自己写的,经检测,可以使用。分享给大家,希望对大家有用。具体的详解可以参见本人的博客。
代码片段和文件信息
#include “spi.h“
//写命令
static void ADS1248_WriteCmd(uint8_t Cmd)
{
AD_nCS_LOW; //拉低片选线,使能SPI通信
HAL_SPI_Transmit(&hspi1 &Cmd 1HAL_MAX_DELAY);
AD_nCS_HIGH; //通信结束,拉高片选
}
////读寄存器
void ADS1248_ReadReg(uint8_t RegAddruint8_t *Bufferuint8_t Length)
{
uint8_t Cmd[2];
AD_nCS_LOW;
AD_START_HIGH; //在写寄存器时吗,需要将START拉高(不让其进入睡眠模式)
Cmd[0]=ADC_CMD_RREG|RegAddr;
Cmd[1]=Length-1;
HAL_SPI_Transmit(&hspi1Cmd2HAL_MAX_DELAY); //发送命令
HAL_SPI_Receive(&hspi1 Buffer Length HAL_MAX_DELAY); //接收寄存器数据
Cmd[0]=ADC_CMD_NOP;
HAL_SPI_Transmit(&hspi1 Cmd1HAL_MAX_DELAY); //最后在发送一个NOP,强制拉高DOUT
AD_nCS_HIGH;
}
//写寄存器
static void ADS1248_WriteReg(uint8_t RegAddruint8_t *Bufferuint8_t Length)
{
uint8_t Cmd[2];
AD_nCS_LOW;
AD_START_HIGH; //在写寄存器时吗,需要将START拉高(不让其进入睡眠模式)
HAL_Delay(20); //硬件延迟
Cmd[0]=ADC_CMD_WREG|RegAddr;
Cmd[1]=Length-1;
HAL_SPI_Transmit(&hspi1 Cmd 2HAL_MAX_DELAY); //指定向指定寄存器写入指定字节数据
HAL_SPI_Transmit(&hspi1 Buffer LengthHAL_MAX_DELAY); //发送数据字节
HAL_Delay(20); //硬件延迟
AD_nCS_HIGH;
AD_START_LOW;
}
//判断忙状态
uint8_t ADS1248_WaitBusy(uint32_t Timeout)
{
uint32_t i = 0;
AD_nCS_LOW;
while(nAD_DRDY_STATE > 0)
{
HAL_Delay(1);
i++;
if(i>Timeout)
return 1;
}
AD_nCS_HIGH;
return 0;
}
//ADS1248系统校准 校准顺序为:自偏移校准->偏移校准->增益校准 .
static uint8_t ADS1248_Calibrate(uint8_t Gain)
{
uint8_t R=0;
uint8_t Cmd;
ADS1248_WriteReg(ADC_REG_SYS0&Gain1); // 设置增益值、ADC输出数据率
Cmd=0x20; //0010 0000
ADS1248_WriteReg(ADC_REG_MUX1&Cmd1); // 设置系统监测为自偏移测量
ADS1248_WriteCmd(ADC_CMD_SELFOCAL); // 自偏移校准
R |= ADS1248_WaitBusy(500); // 等待校准完成
Cmd=0x21; //0010 0001
ADS1248_WriteReg(ADC_REG_MUX1&Cmd1); // 设置系统监测为偏移测量
ADS1248_WriteCmd(ADC_CMD_SYSOCAL); // 系统偏移校准
R |= ADS1248_WaitBusy(500); // 等待校准完成
Cmd=0x22;
ADS1248_WriteReg(ADC_REG_MUX1&Cmd1); // 设置系统监测为增益测量
ADS1248_WriteCmd(ADC_CMD_SYSGCAL); // 系统增益校准
R |= ADS1248_WaitBusy(500); // 等待校准完成
return R;
}
//复位ADS1248
void ADS1248_Reset()
{
AD_nCS_HIGH;
AD_START_HIGH; //???为什么不是置低
nADRST_LOW; //置低nADRST,复位ADS1248
HAL_Delay(20);
nADRST_HIGH;
HAL_Delay(20);
}
//ADS1248初始化
void ADS1248_Init(void)
{
uint8_t Cmd;
uint8_t Gain;
ADS1248_Reset(); //系统复位
HAL_Delay(100);
Gain = ADC_GAIN_16|ADC_SPS_20;
//初始化MUX0多路复用控制寄存器
Cmd = 0x17 ; //00 010 111Bit7-6:传感器电流源检测不使用,Bit5-3:正输入为AIN2,Bit2-0:负输入为AIN7
ADS1248_WriteReg(ADC_REG_MUX0&Cmd1);
Cmd=0x20 ;//0 01 00 000
ADS1248_WriteRe
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-06-10 19:59 ADS1248驱动源码\
文件 5044 2018-06-10 19:48 ADS1248驱动源码\spi.c
文件 3609 2018-06-08 09:14 ADS1248驱动源码\spi.h
评论
共有 条评论