#include "ADS1292R.h"
#include "usart.h"
#include "delay_us.h"
/*该芯片在不传输数据的时候,片选引脚应该拉高*/
uint8_t ADS1292R_data_buf[9] = {0}; //ADS1292R接收数据数组
volatile uint8_t ADS1292R_tmp[9] = {0};
void ADS_Init(void)
{
ADS_CS_H;
ADS_START_H;
ADS_PWDN_L;
HAL_Delay(10);
}
/*读寄存器*/
uint8_t ADS_SPI_RW(uint8_t data)
{
uint8_t rx_data = 0;
HAL_SPI_TransmitReceive(&hspi1, &data, &rx_data, 1, HAL_MAX_DELAY);
return rx_data;
}
/**ADS1292R上电复位 **/
void ADS_PowerOnInit(void)
{
uint8_t device_id=0;
ADS_START_H;
ADS_CS_H;
ADS_PWDN_L;//进入掉电模式
ADS_PWDN_H;//退出掉电模式
HAL_Delay(200);//等待稳定
ADS_PWDN_L;//发出复位脉冲
delay_us(20);
ADS_PWDN_H;
HAL_Delay(1000);//等待稳定,可以开始使用ADS1292R
ADS_START_L;
ADS_CMD(SDATAC);//发送停止连续读取数据命令
HAL_Delay(200);
while(device_id!=0x73 && device_id!=0x53) //识别芯片型号,1292r为0x73
{
device_id = ADS_REG(RREG|ID,0X00);
HAL_Delay(200);
printf(" %d ",device_id);
}
while(1)
{
printf("正确ID");
printf(" %d ",device_id);
HAL_Delay(100);
}
ADS_REG(WREG|CONFIG2, 0XE0); //使用内部参考电压
HAL_Delay(10);//等待内部参考电压稳定
ADS_REG(WREG|CONFIG1, 0X02); //设置转换速率为500SPS
//ADS_REG(ADS_WREG|ADS_CONFIG1, 0X00); //设置转换速率为125SPS
ADS_REG(WREG|LOFF, 0XF0);
ADS_REG(WREG|CH1SET, 0X00); //放大倍数6倍
ADS_REG(WREG|CH2SET, 0x00);
ADS_REG(WREG|RLD_SENS, 0x30);
ADS_REG(WREG|LOFF_SENS, 0x3F);
ADS_REG(WREG|RESP1, 0xDE); //开启呼吸检测(ADS1292R特有)
ADS_REG(WREG|RESP2, 0x07);
}
void ADS_Work(void)
{
ADS_CMD(RDATAC);//回到连续读取数据模式,检测噪声数据
ADS_START_H;//启动转换
}
void ADS_Halt(void)
{
ADS_START_L;//启动转换
ADS_CMD(SDATAC);//发送停止连续读取数据命令
}
//对ADS1292R写入指令
void ADS_CMD(uint8_t cmd)
{
ADS_CS_L;
delay_us(10);
ADS_SPI_RW(cmd);
delay_us(10);
ADS_CS_H;
}
//对ADS1292R内部寄存器进行操作
uint8_t ADS_REG(uint8_t cmd, uint8_t data) //只读一个数据
{
uint8_t rx_data = 0;
ADS_CS_L;
delay_us(10);
ADS_SPI_RW(cmd); //读写指令
ADS_SPI_RW(0X00); //需要写几个数据(n+1个)
if((cmd&0x20)==0x20) //判断是否为读寄存器指令
rx_data = ADS_SPI_RW(0X00); //返回寄存器值
else
rx_data = ADS_SPI_RW(data); //写入数值
delay_us(10);
ADS_CS_H;
return rx_data;
}
static uint8_t temp1292r[9] = {0}; //并没有什么卵用
/*读取72位的数据1100+LOFF_STAT[4:0]+GPIO[1:0]+13个0+2CHx24位,共9字节*/
void ADS_ReadData(void)
{
ADS_CS_L;
HAL_SPI_TransmitReceive(&hspi1, temp1292r, ADS1292R_data_buf, 9, 10);
ADS_CS_H;
}
这是配置界面
但是我一直无法正确输出ID号0X73,通过串口打印都是乱码