STM32入门开发操作记录(四)——光控蜂鸣器

一、项目准备

1. 工程模板

  本篇项目所用模板包含以下模块,声明函数见头文件,模块添加和函数功能详见往期记录。项目打包前可使用keilkill.bat清除中间文件,位置Resource\程序源码\STM32Project-无注释版\1-2 keilkill批处理

请添加图片描述

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

2. 器件接线

  主装置:ST-Link仿真器,STM32系统板,MB102面包板(接线详见往期记录)

器件端口/电源
3.3/VCC+
GND-
Buzzer-I/OB12
Sensor-DOB13

  增加模块:蜂鸣器B12端口),光敏传感器(B13端口)
请添加图片描述

  观察光敏传感器:弱光下,输出指示灯灭,输出高电平强光下,输出指示灯灭,输出低电平

二、蜂鸣器驱动模块

  与LED驱动模块原理类似。

1. Buzzer.c

#include "stm32f10x.h"

// 蜂鸣器端口初始化
void Buzzer_Init(void)
{
	// 开启GPIOB时钟
	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;				// PB12引脚
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		// 最大速度50MHz
	
	// 初始化GPIOB时钟
	GPIO_Init(GPIOB, &GPIO_InitStructure);
}

// 鸣叫
void Buzzer_ON(void)
{
	GPIO_ResetBits(GPIOB, GPIO_Pin_12);		// 低电平
}

// 静默
void Buzzer_OFF(void)
{
	GPIO_SetBits(GPIOB, GPIO_Pin_12);		// 高电平
}

2. Buzzer.h

#ifndef __BUZZER_H
#define __BUZZER_H

// B12端口蜂鸣器
void Buzzer_Init(void);		
void Buzzer_ON(void);
void Buzzer_OFF(void);

#endif

三、光敏传感器模块

1. LightSensor.c

#include "stm32f10x.h"

// 光敏传感器端口初始化
void LightSensor_Init(void)
{
	// 开启GPIOB时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	
	// 配置结构体参数
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;			// 上拉输入模式
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;				// PB13引脚
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		// 最大速度50MHz
	
	// 初始化GPIOB时钟
	GPIO_Init(GPIOB, &GPIO_InitStructure);
}

// 监测
uint8_t LightSensor_Get(void)
{	
	// 读取并发送B13端口的输入电平
	return GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13);
}

2. LightSensor.h

#ifndef __LIGHTSENSOR_H
#define __LIGHTSENSOR_H

// B13端口光敏传感器
void LightSensor_Init(void);		
uint8_t LightSensor_Get(void);

#endif

四、光控警铃

  强光下,装置持续鸣叫;弱光下,装置切为静默。

#include "stm32f10x.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();	// 静默
		}
	}
}

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值