最近在使用max30102做心率血氧传感器,使用STM32F103进行控制,网络上有很多版本的代码。
找了几个STM32版本的,经过调试现在只能测量血氧,只能手表测的血氧值是100,自己做的传感器测也是能比较准确地测出来,就是心率测试基本测不准,浮动非常大,具体看下方的视频。大概看了下手册寄存器的配置,以及网络上的开发过程,没有发现问题所在。
有没有大佬遇到过类似的问题,调试了很久,还是只能测量血氧而已,芯片有一个中断引脚,低电平有效,之前有试过有中断和没有中断的情况,好像并没有什么差别,以下是有中断的部分代码:
中断配置部分:
//-----------------------------------------------------------------
// void GPIO_EXTInterrupt_Configuration(void)
//-----------------------------------------------------------------
//
// 函数功能: 外中断输入I/O配置
// 入口参数: 无
// 返 回 值: 无
// 注意事项: PA.6----EXTI_IN
//-----------------------------------------------------------------
void GPIO_EXTInterrupt_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
// 开启PA时钟和I/O复用时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE); //低速使用APB1高速为APB2
// 使用PA.6上拉输入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
//-----------------------------------------------------------------
// void EXTInterrupt_Mode_Configuration(void)
//-----------------------------------------------------------------
//
// 函数功能: 外中断的配置
// 入口参数: 无
// 返 回 值: 无
// 注意事项:
//-----------------------------------------------------------------
void EXTInterrupt_Mode_Configuration(void)
{
EXTI_InitTypeDef EXTI_InitStructure;
// PA.6与中断线6相映射
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource6);
// PA.6对应中断线6//外中断//下降沿触发中断
EXTI_InitStructure.EXTI_Line=EXTI_Line6;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
}
//-----------------------------------------------------------------
// void NVIC_Configuration(void)
//-----------------------------------------------------------------
//
// 函数功能: 配置外中断嵌套中断向量
// 入口参数: 无
// 返 回 值: 无
// 注意事项:
//-----------------------------------------------------------------
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
// 设置NVIC中断分组2,其中2位抢占优先级,2位响应优先级
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
// 选择外部中断通道//抢占优先级0//子优先级0
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //外部中断线通道使能
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //副优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //
NVIC_Init(&NVIC_InitStructure);
}
等待中断产生低电平后读取数据
下面是调试效果:
最后在说一下问题,心率测不准(几乎就没侧准过那种),目前还不知道哪里出问题了,来这里收集一下思路。
血氧和心率应该不能同时测量吧?
引用: w494143467 发表于 2021-6-3 11:33 血氧和心率应该不能同时测量吧?
可以的,数据手册有说,主要我这个没有一次侧出来的数据是准确的就很奇怪
引用: bqgup 发表于 2021-6-3 11:38 心率数据需要做个FFT运算,要采集一定长度的数据进行FFT变换吧
这个有算法文件的,那个类似运算的东西应该都在算法文件里面
引用: 1nnocent 发表于 2021-6-3 12:37 可以的,数据手册有说,主要我这个没有一次侧出来的数据是准确的就很奇怪
你可以试着单独开一个测试,因为同时要测两个数据的话,需要交替的测量,因为血氧用的红灯,心率用的绿灯。