STM32CubeMX中准备工作:
1、设置AD 通道,我采用的是DMA传输,格式:halfword,半字节即uint_16
2、设置一个定时器中断,间隔时间2ms,我这里采用的是定时器7
3、代码优化01

PulseSensor.c文件
#include "main.h"
#include "PulseSensor/PulseSensor.h"
/******************外设部分用变量*********************/
//定时器间隔时间:2ms
volatile uint8_t DelayPulseSensor_Output=0; //500ms
//AD采样值
volatile uint16_t ADPulseSensor; // ADC转换值,设置为halfword 半字节格式 采样时间为239.5周期
/******************心率算法采集部分*********************/
_Bool ReadHeartRateFlag = 0; //读取到正确心率标志位
uint16_t BPM; //脉搏率==就是心率
uint16_t Signal; //传入的原始数据。
uint16_t IBI = 600; //节拍间隔,两次节拍之间的时间(ms)。计算:60/IBI(s)=心率(BPM)
_Bool Pulse = false; //脉冲高低标志。当脉波高时为真,低时为假。
_Bool QS = false; //当发现一个节拍时,就变成了真实
uint16_t rate[10]; //数组保存最后10个IBI值。
uint32_t sampleCounter = 0; //用于确定脉冲定时。
uint32_t lastBeatTime = 0; //用于查找IBI
uint16_t P =512; //用于在脉冲波中寻找峰值
uint16_t T = 512; //用于在脉冲波中寻找波谷
uint16_t thresh = 512; //用来寻找瞬间的心跳
uint16_t amp = 100; //用于保持脉冲波形的振幅
uint16_t Num;
_Bool firstBeat = true; //第一个脉冲节拍
_Bool secondBeat = false;//

1294

被折叠的 条评论
为什么被折叠?



