資源簡介
這是本人參考網上的資源和老師給的代碼自己寫的,經檢測,可以使用。分享給大家,希望對大家有用。具體的詳解可以參見本人的博客。

代碼片段和文件信息
#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
- 上一篇:貼片式USB TYPE-C的封裝庫(帶3D視圖)
- 下一篇:串口以太網二合一調試助手
評論
共有 條評論