目录
一、项目准备
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/O | B12 |
Sensor-DO | B13 |
增加模块:蜂鸣器(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(); // 静默
}
}
}