Part Number:ADS1299
目前测试发现,SPI接收到的数据不对,全部都是255和0,并且没有规律,但是SPI函数可以正常使用。使用stm32f407。想看看论坛里有没有人有这样的问题,可以帮忙解答。
下面是ADS1299的原理图:
下面是ADS1299初始化以及寄存器配置:相关定义已经定义好了。
void ADS_PowerOnInit(void) { uint8_t tid; uint8_t tmp; HAL_GPIO_WritePin(GPIOA,START_Pin,GPIO_PIN_RESET); tmp = SDATAC; HAL_SPI_Transmit(&hspi1,&tmp,1,1000);//===fff=== Í£Ö¹Á¬Ðø¶Áģʽ HAL_Delay(1000); LED1_TOGGLE(); HAL_GPIO_WritePin(PWDN_LOW_GPIO_Port,PWDN_LOW_Pin,GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOA,RESET_LOW_Pin,GPIO_PIN_SET); HAL_Delay(3000); LED1_TOGGLE(); HAL_GPIO_WritePin(GPIOA,RESET_LOW_Pin,GPIO_PIN_RESET); HAL_SPI_Transmit(&hspi1,&tmp,1,1000); HAL_GPIO_WritePin(GPIOA,RESET_LOW_Pin,GPIO_PIN_SET); LED1_TOGGLE(); HAL_Delay(10); tid = RD_REG(RREG,1); HAL_Delay(1000); WR_REG(WREG|CONFIG3,0xe0); //ec WR_REG(WREG|CONFIG1,0x96); WR_REG(WREG|CONFIG2,0xd0); //WR_REG(WREG|CONFIG3,0xe0); HAL_Delay(200); WR_REG(WREG|MISC1,0x20); HAL_Delay(10); // WR_REG(WREG|BIAS_SENSP,0XFF); //amplified x1 // HAL_Delay(1); // WR_REG(WREG|BIAS_SENSP,0XFF); //amplified x1 // HAL_Delay(1); WR_REG(WREG|CH1SET,0X05); //amplified x1 HAL_Delay(10); WR_REG(WREG|CH2SET,0X05); //amplified x1 HAL_Delay(10); WR_REG(WREG|CH3SET,0X05); //amplified x1 HAL_Delay(10); WR_REG(WREG|CH4SET,0X05); //amplified x1 HAL_Delay(10); WR_REG(WREG|CH5SET,0X05); //amplified x1 HAL_Delay(10); WR_REG(WREG|CH6SET,0X05); //amplified x1 HAL_Delay(10); WR_REG(WREG|CH7SET,0X05); //amplified x1 HAL_Delay(10); WR_REG(WREG|CH8SET,0X05); //amplified x1 HAL_Delay(10); HAL_GPIO_WritePin(GPIOA,START_Pin,GPIO_PIN_SET); HAL_Delay(10); tmp = RDATAC; HAL_SPI_Transmit(&hspi1,&tmp,1,1000); HAL_Delay(1000); }
下面是stm32f407主程序:省略掉了一些数组和标志位的定义。
while(1) {ADS_PowerOnInit(); HAL_GPIO_WritePin(START_GPIO_Port, START_Pin, GPIO_PIN_SET); uint8_t tmp; tmp = RDATAC; HAL_SPI_Transmit(&hspi1,&tmp,1,1000); while(times<32) { if(DRDY==GPIO_PIN_SET) { sign=1; } if(DRDY==GPIO_PIN_RESET&&sign==1) { times++; sign=0; for(int i=0;i<27;i++) { HAL_SPI_Receive(&hspi1,&data[count],1,1000); count++; LED0(0); LED1(1); } } } for(int i=0;i<count;i++) { datad[i]=(float)data[i]; printf("%f \r\n",datad[i]); }
Alice:
您好,
请参考下面帖子,检查芯片是否已工作。
[FAQ] ADS1298: ADS129x:如何验证 ADS129x 器件是否仍然正常工作? – 数据转换器论坛 – 数据转换器 – E2E 设计支持 (ti.com)
芯片正常启动后,读取芯片ID(9.6.1.1 ID: ID Control Register) 检查SPI时序。
ADS1299-x 适用于 EEG 和生物电势测量的低噪声 4 通道、6 通道、8 通道、24 位模数转换器 datasheet (Rev. C) (ti.com.cn)
下面的帖子有SPI调试步骤,也请参考。
[FAQ] 【常见问题解答】ADS129x问题咨询 – 数据转换器论坛 – 数据转换器 – E2E 设计支持 (ti.com)