K_A12_030 基于STM32驱动Pulse sensor心率模块 上位机与OLED0.96双显示
- 一、资源说明
 - 二、基本参数
 - 参数
 - 引脚说明
 
- 三、驱动说明
 - STM32 ADC采集:
 
- 四、部分代码说明
 - 1、接线引脚定义
 - STM32F103C8T6+Pulse sensor心率模块
 
- 五、基础知识学习与相关资料下载
 - 六、视频效果展示与程序资料获取
 - 七、注意事项
 - 八、接线说明
 - STM32F103C8T6
 

一、资源说明
| 单片机型号 | 测试条件 | 模块名称 | 代码功能 | 
|---|---|---|---|
| STM32F103C8T6 | 晶振8M/系统时钟72M | Pulse sensor心率模块 | STM32F103C8T6驱动Pulse sensor心率模块参数 串口与OLED0.96双显示 | 
其他资料目录 直戳跳转
二、基本参数
参数
LED峰值波长:515nm(绿光)
 供电电压:3.3-5V
 检测信号类型:光反射信号(PPG)
 输出信号:模拟信号
 信号放大倍数:330倍
 输出信号范围:0-VCC
 电流大小:4ma左右(5V)
 分辨率:1bpm
 采样率:500HZ(程序设定)
引脚说明
| Pulse sensor心率模块 | 引脚说明 | 
|---|---|
| VCC | 正极 3.3V供电 | 
| GND | 负极 接GND | 
| S | 模拟量输出 | 
三、驱动说明
STM32 ADC采集:
/**
  * @brief  ADC GPIO 初始化
  * @param  无
  * @retval 无
  */
static void ADCx_GPIO_Config(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	
	// 打开 ADC IO端口时钟
	ADC_GPIO_APBxClock_FUN ( ADC_GPIO_CLK, ENABLE );
	
	// 配置 ADC IO 引脚模式
	// 必须为模拟输入
	GPIO_InitStructure.GPIO_Pin = ADC_PIN;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
	
	// 初始化 ADC IO
	GPIO_Init(ADC_PORT, &GPIO_InitStructure);				
}
/**
  * @brief  配置ADC工作模式
  * @param  无
  * @retval 无
  */
static void ADCx_Mode_Config(void)
{
	ADC_InitTypeDef ADC_InitStructure;	
	// 打开ADC时钟
	ADC_APBxClock_FUN ( ADC_CLK, ENABLE );
	
	// ADC 模式配置
	// 只使用一个ADC,属于独立模式
	ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
	
	// 禁止扫描模式,多通道才要,单通道不需要
	ADC_InitStructure.ADC_ScanConvMode = DISABLE ; 
	// 连续转换模式
	ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
	// 不用外部触发转换,软件开启即可
	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
	// 转换结果右对齐
	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
	
	// 转换通道1个
	ADC_InitStructure.ADC_NbrOfChannel = 1;	
		
	// 初始化ADC
	ADC_Init(ADCx, &ADC_InitStructure);
	
	// 配置ADC时钟为PCLK2的8分频,即9MHz
	RCC_ADCCLKConfig(RCC_PCLK2_Div8); 
	
	// 配置 ADC 通道转换顺序和采样时间
	ADC_RegularChannelConfig(ADCx, ADC_CHANNEL, 1, 
	                         ADC_SampleTime_55Cycles5);
	
//	// ADC 转换结束产生中断,在中断服务程序中读取转换值
//	ADC_ITConfig(ADCx, ADC_IT_EOC, ENABLE);
	
	// 开启ADC ,并开始转换
	ADC_Cmd(ADCx, ENABLE);
	
	// 初始化ADC 校准寄存器  
	ADC_ResetCalibration(ADCx);
	// 等待校准寄存器初始化完成
	while(ADC_GetResetCalibrationStatus(ADCx));
	
	// ADC开始校准
	ADC_StartCalibration(ADCx);
	// 等待校准完成
	while(ADC_GetCalibrationStatus(ADCx));
	
	// 由于没有采用外部触发,所以使用软件触发ADC转换 
	ADC_SoftwareStartConvCmd(ADCx, ENABLE);
}
 
四、部分代码说明
1、接线引脚定义
需要自定义引脚可在此处更改,STM32要自定义引脚的话也要注意引脚时钟使能的更改
STM32F103C8T6+Pulse sensor心率模块
//Pulse sensor心率模块引脚定义
#define    ADC_GPIO_APBxClock_FUN        RCC_APB2PeriphClockCmd
#define    ADC_GPIO_CLK                  RCC_APB2Periph_GPIOA  
#define    ADC_PORT                      GPIOA
#define    ADC_PIN                       GPIO_Pin_0
//OLED0.96模块引脚定义					
#define OLED_SCLK_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_8)//SCL
#define OLED_SCLK_Set() GPIO_SetBits(GPIOB,GPIO_Pin_8)
#define OLED_SDIN_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_9)//SDA
#define OLED_SDIN_Set() GPIO_SetBits(GPIOB,GPIO_Pin_9)
 
五、基础知识学习与相关资料下载
1、STC89C52RC程序下载 直戳跳转
2、STM32F103C8T6程序下载 
 (1)串口下载 直戳跳转
 (2)ST-LINK下载 直戳跳转
 (3)J-LINK下载 直戳跳转
 (4)DAP-LINK下载 直戳跳转
3、OLED0.96程序说明 直戳跳转
4、串口助手下载与使用
 (1)安信可调试助手使用 直戳跳转
 (2) sscom33串口调试助手使用 直戳跳转
 (3)STC-ISP串口调试助手使用 直戳跳转
六、视频效果展示与程序资料获取
视频连接 直戳跳转
 资料获取 ( 滑到最后添加个人号)
七、注意事项
1、VCC GND请勿接反,接反易烧
 2、OLED显示异常时,排除接线接触不良
八、接线说明
STM32F103C8T6
/************************************************************************************
//  生成日期   : 2021-6-21
//  最近修改   : 2021-11-21
//  功能描述   : Pulse sensor心率模块测试程序
//  测试条件   : STM32F103C8T6   晶振8M  系统时钟72M
接线
Pulse sensor心率模块-------------------STM32F103C8T6
VCC------------------------------------3.3V
S--------------------------------------PA0
OLED0.96-------------------------------STM32F103C8T6
VCC------------------------------------5V
GND------------------------------------GND
SCL -----------------------------------PB8 
SDA------------------------------------PB9
*************************************************************************************/
                


















