一、整体功能
PA3 引脚控制有源蜂鸣器
- 初始化 PA3 → 输出高电平 → 蜂鸣器一直响
二、程序代码
1、main.c (主程序,程序入口)
#include "stm32f10x.h"
#include "main.h"
#include "bear.h"
-
引入 STM32 核心库
-
bear.h:让 main 知道Bear_Init()这个函数int main()
{
Bear_Init(); -
开机第一步:初始化 PA3 引脚
-
不初始化,蜂鸣器不工作
while(1)
{
GPIO_SetBits(GPIOA, GPIO_Pin_3);
}
} -
死循环
-
让 PA3 持续输出高电平
-
你的蜂鸣器是 高电平触发响
-
所以一上电就 一直响
2、bear.c (蜂鸣器驱动文件)
#include "bear.h"
#include "stm32f10x.h"
-
引入需要的头文件
void Bear_Init(void)
{
GPIO_InitTypeDef bear_initstruct; -
定义一个 GPIO 结构体
-
用来配置 PA3
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
-
开启 GPIOA 时钟
-
所有外设必须开时钟才能工作!
bear_initstruct.GPIO_Pin = GPIO_Pin_3;
-
选择 PA3 引脚
bear_initstruct.GPIO_Speed = GPIO_Speed_10MHz;
-
设置速度 10MHz(蜂鸣器随便选)
bear_initstruct.GPIO_Mode = GPIO_Mode_Out_PP;
-
推挽输出模式
-
能稳定输出高 / 低电平
GPIO_Init(GPIOA, &bear_initstruct);
} -
把配置真正写入单片机
-
执行完,PA3 就变成输出模式了
3、bear.h (函数声明)
void Bear_Init(void);
- 告诉 main.c
- "Bear_Init () 函数存在,可以调用"
- 没有它,main 会报错
三、程序运行流程
- 单片机上电
- 进入 main
- 调用
Bear_Init()初始化 PA3 - 进入
while(1)死循环 - PA3 持续输出高电平
- 蜂鸣器一直响...
我用的是 有源蜂鸣器:
- 高电平 → 响
- 低电平 → 不响
所以:
GPIO_SetBits(GPIOA, GPIO_Pin_3); // 响
GPIO_ResetBits(GPIOA, GPIO_Pin_3); // 不响