STM32F103(标准库)光敏传感器控制蜂鸣器

STM32F103(标准库)光敏传感器控制蜂鸣器

在智能小车、安防系统等应用中,光敏传感器常常用于环境光检测,而蜂鸣器则用于声音提示。

本文将基于 STM32F103 标准库 实现一个简单的实验:通过光敏传感器检测光线变化,控制蜂鸣器响/停


一、实验目标

  • 学习 光敏传感器 在 STM32 上的输入采集。
  • 掌握 蜂鸣器 GPIO 输出 的控制方法。
  • 理解 传感器输入与执行器输出联动 的设计思想。
  • 编写模块化代码(传感器、蜂鸣器、延时),提升工程结构化能力。

二、硬件准备

  1. 核心硬件

    • STM32F103C8T6 最小系统板
    • 光敏传感器模块(数字量输出 DO 引脚)
    • 有源蜂鸣器模块
  2. 接线示例

    • 光敏传感器 DO → PB13(上拉输入)
    • 蜂鸣器控制 → PB12(推挽输出)
    • VCC 接 3.3V,GND 接地

img


三、软件设计

程序分为 主函数、蜂鸣器驱动、光敏传感器驱动、延时模块

1. 主函数 main.c

根据光敏传感器的输入电平,决定蜂鸣器的开关状态。

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "Buzzer.h"
#include "LightSensor.h"

int main(void)
{
	Buzzer_Init();
	LightSensor_Init();
	
	while (1)
	{
		if (LightSensor_Get() == 1)   // 光敏检测到高电平
		{
			Buzzer_ON();             // 蜂鸣器响
		}
		else
		{
			Buzzer_OFF();            // 蜂鸣器停
		}
	}
}

2. 蜂鸣器驱动 Buzzer

Buzzer.h

#ifndef __BUZZER_H
#define __BUZZER_H

void Buzzer_Init(void);
void Buzzer_ON(void);
void Buzzer_OFF(void);
void Buzzer_Turn(void);

#endif

Buzzer.c

#include "stm32f10x.h"                  // Device header

void Buzzer_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
	
	GPIO_SetBits(GPIOB, GPIO_Pin_12);    // 默认关闭蜂鸣器
}

void Buzzer_ON(void)
{
	GPIO_ResetBits(GPIOB, GPIO_Pin_12);
}

void Buzzer_OFF(void)
{
	GPIO_SetBits(GPIOB, GPIO_Pin_12);
}

void Buzzer_Turn(void)
{
	if (GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_12) == 0)
	{
		GPIO_SetBits(GPIOB, GPIO_Pin_12);
	}
	else
	{
		GPIO_ResetBits(GPIOB, GPIO_Pin_12);
	}
}

3. 光敏传感器驱动 LightSensor

LightSensor.h

#ifndef __LIGHT_SENSOR_H
#define __LIGHT_SENSOR_H

void LightSensor_Init(void);
uint8_t LightSensor_Get(void);

#endif

LightSensor.c

#include "stm32f10x.h"                  // Device header

void LightSensor_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;    // 上拉输入
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
}

uint8_t LightSensor_Get(void)
{
	return GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13);
}

4. 延时模块 Delay

Delay.h

#ifndef __DELAY_H
#define __DELAY_H

void Delay_us(uint32_t us);
void Delay_ms(uint32_t ms);
void Delay_s(uint32_t s);

#endif

Delay.c

#include "stm32f10x.h"

void Delay_us(uint32_t xus)
{
	SysTick->LOAD = 72 * xus;				
	SysTick->VAL = 0x00;					
	SysTick->CTRL = 0x00000005;				
	while(!(SysTick->CTRL & 0x00010000));	
	SysTick->CTRL = 0x00000004;				
}

void Delay_ms(uint32_t xms)
{
	while(xms--)
	{
		Delay_us(1000);
	}
}
 
void Delay_s(uint32_t xs)
{
	while(xs--)
	{
		Delay_ms(1000);
	}
} 

四、运行效果

  1. 上电后,系统开始运行。
  2. 当光敏传感器检测到 光线变化(如被遮挡时输出高电平),蜂鸣器立即 响起
  3. 当光线恢复正常,蜂鸣器 停止
  4. 该逻辑可以扩展用于 防盗报警、夜间感应提醒 等应用场景。

五、总结

本实验基于 STM32F103 标准库,完成了一个 光敏传感器控制蜂鸣器 的应用。

主要收获:

  • 学习了 GPIO 输入(光敏传感器)与输出(蜂鸣器) 的配置方法;
  • 体会了 传感器 → 控制逻辑 → 执行器 的应用链路;
  • 通过模块化设计(Buzzer、LightSensor、Delay),程序结构更加清晰,方便后续扩展。

这个实验非常适合作为 传感器 + 执行器联动控制 的入门案例,为进一步开发智能系统打下了基础。

posted @ 2025-08-30 14:31  jeikerxiao  阅读(73)  评论(0)    收藏  举报