基于stm32的可穿戴心电采集之ads1292r的调试总结

一 概述

  在生理信号领域死磕,那就离不开对心电的研究。笔者最近用到ads1292r。调试过程中走了一些弯路,这里做个梳理和总结。

二 源码解析

1.ads1292的初始化寄存器配置:


void ads1292_init(void)
{
	uint8_t id;

	Ads1292_Reset();
	osDelay(10);
    mprintf("aa ads_rx_irq_cnt is: %d \n\r", ads_rx_irq_cnt);

	ADS1292_poweron_init();
	osDelay(10);

    mprintf("ss ads_rx_irq_cnt is: %d \n\r", ads_rx_irq_cnt);

	// 0 is 125 sps 1 is 250 sps 2 is 500 sps 3 is 1k sps 4 is 2k sps 5 is 4k sps 6 is 8k sps
	ADS_1292_WREG(ADS1292_REG_CONFIG1, 0x00);//Set sampling rate to 125 SPS
	osDelay(10);
	ADS_1292_WREG(ADS1292_REG_CONFIG2, 0xA0);//Lead-off comp off,0
	id = ADS_1292_RREG(ADS1292_REG_CONFIG2);
	mprintf("ads1292 CFG2=%#X\r\n", id);
	osDelay(10);
	ADS_1292_WREG(ADS1292_REG_LOFF, 0x10);//Lead-off defaults
	osDelay(10);
	ADS_1292_WREG(ADS1292_REG_CH1SET, 0x00);//Ch 1 enabled, gain 1
	id = ADS_1292_RREG(ADS1292_REG_CH1SET);
	mprintf("ads1292 CH1SET is=%#X\r\n", id);
	osDelay(10);
	ADS_1292_WREG(ADS1292_REG_CH2SET, 0x00);    //Ch 2 enabled, gain 1
	osDelay(10);
	ADS_1292_WREG(ADS1292_REG_RLDSENS, 0x00);   //RLD settings: off
	osDelay(10);
	ADS_1292_WREG(ADS1292_REG_LOFFSENS, 0x00);          //LOFF settings: all disabled
	osDelay(10);
	ADS_1292_WREG(ADS1292_REG_RESP1, 0xc2);             //Respiration: MOD/DEMOD turned only, phase 0
	osDelay(10);
	ADS_1292_WREG(ADS1292_REG_RESP2, 0x03);             //Respiration: Calib OFF, respiration freq defaults
	osDelay(10);
	ADS_1292_WREG(ADS1292_REG_GPIO, 0x0C);              //GPIO input
	osDelay(10);


	id = ADS_1292_RREG(ADS1292_REG_ID);
	mprintf("ads1292r ID=0x%x\r\n", id);
	mprintf("ads1292 (01 is ads1292 10 is ads1291 11 is ads1292 or ads1292r)ID=0x%x\r\n", id & 0x03);


	for (uint32_t i = 0; i < 10; i++)
	{
		/* code */
		uint8_t temp_val = ADS_1292_RREG(i);
		mprintf("ads read addr is:0x%x val is:0x%x \n\r",i,temp_val);

	}

	// hardware controller 
	//Ads1292_Enable_Start();

	ads1292_data_start();

}

 2.ads1292r的数据读取入口:

/**
  * @brief This function handles EXTI line1 interrupt.
  */
void EXTI1_IRQHandler(void)
{
  /* USER CODE BEGIN EXTI1_IRQn 0 */
	HAL_GPIO_WritePin(SPI2_CS_GPIO_Port, SPI2_CS_Pin, GPIO_PIN_RESET);
	if(HAL_SPI_TransmitReceive_DMA(&hspi2, ADS1299_Txbuffer, ADS1299_Rxbuffer, 3+RX_ADS_NUM)!=HAL_OK)
	{
	  __set_FAULTMASK(1);
	  HAL_NVIC_SystemReset();
	}
	 __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_1);
  /* USER CODE END EXTI1_IRQn 0 */
  HAL_GPIO_EXTI_IRQHandler(ADS_DRDY_Pin);
  /* USER CODE BEGIN EXTI1_IRQn 1 */
  /* USER CODE END EXTI1_IRQn 1 */
}

三 思路梳理

1.硬件的连接:

这个硬件接口比较多,注意每个接口都是通的非常关键。最有效的方法使用万用表逐个测量,确保连线是ok了再做其他。

2.首先确认一能否读到ID号码,这个是判断是否通的关键。

 3.读不到数据怎么办?

拿笔者上面的代码反复确认一下,假如代码配置有问题,特别是clk的配置,是读不到数据的。

四 总结

心电的东西还不少,后续还要继续加大分析力度,比如,性能,算法。等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值