STM32——继电器

一、实验功能

本实验使用 STM32F103 单片机驱动 5V 继电器模块,实现:

  • 继电器 每间隔 1 秒吸合一次
  • 继电器 每间隔 1 秒断开一次
  • 循环往复,持续工作
  • 模块化编程

二、硬件连接

  • 继电器 VCC → 5V
  • 继电器 GND → 开发板 GND
  • 继电器 IN → PA0
  • 低电平触发吸合,高电平断开

三、完整代码

main.c 主程序文件

复制代码
// 包含STM32内核与外设库文件
#include "stm32f10x.h"

// 工程主头文件
#include "main.h"

// 包含LED初始化函数声明
#include "led.h"

// 包含继电器初始化函数声明
#include "relay.h"

/**
 * @brief  毫秒级软件延时函数
 * @param  time: 延时时间,单位约1ms
 * @return 无
 */
void delay(uint16_t time)  //延时 1ms函数
{
	uint16_t i = 0;
	while(time --)   // 循环time次,实现延时
	{
		i = 12000;   // 内部空循环,消耗CPU时间
		while(i --);
	}
}

/**
 * @brief  主函数,程序上电入口
 * @param  无
 * @return int
 */
int main()
{
	// 初始化LED引脚(如果不需要可删除)
	LED_Init();
	
	// 初始化继电器控制引脚 PA0
	Relay_Init();
	
	// 初始状态:PA0输出高电平 → 继电器默认断开
	GPIO_SetBits( GPIOA,  GPIO_Pin_0);
	
	// 死循环,程序永久执行
	while(1)
    {
		// PA0输出低电平 → 继电器吸合(有咔哒声)
		GPIO_ResetBits(GPIOA,  GPIO_Pin_0);		
		delay(1000);  // 保持吸合1秒
		
		// PA0输出高电平 → 继电器断开
		GPIO_SetBits( GPIOA,  GPIO_Pin_0);   
		delay(1000);  // 保持断开1秒
    }
}

relay.c 继电器驱动文件

复制代码
// 包含STM32标准库
#include "stm32f10x.h"

// 包含继电器头文件
#include "relay.h"

/**
 * @brief  继电器初始化函数
 * @detail 配置 PA0 为推挽输出模式,用于控制继电器
 * @param  无
 * @return 无
 */
void Relay_Init(void)
{
	// 定义GPIO初始化结构体
	GPIO_InitTypeDef relay_initstruct;
	
	// 开启GPIOA的时钟(必须开时钟才能使用GPIO)
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	// 配置PA0引脚
	relay_initstruct.GPIO_Pin = GPIO_Pin_0;
	
	// 推挽输出模式(可输出强高低电平,适合驱动继电器)
	relay_initstruct.GPIO_Mode = GPIO_Mode_Out_PP;
	
	// GPIO速度设置为10MHz
	relay_initstruct.GPIO_Speed = GPIO_Speed_10MHz;
	
	// 初始化PA0引脚
	GPIO_Init(GPIOA, &relay_initstruct);
}

relay.h 继电器头文件

复制代码
// 防止头文件重复包含(标准写法)
#ifndef RELAY_H_
#define RELAY_H_

// 继电器初始化函数声明
void Relay_Init(void);

#endif

四、文字讲解

1. 实验原理

继电器是一种 电磁开关,通过单片机小电流控制大电流设备(灯泡、风扇、水泵等)。

本实验中:

  • PA0 输出低电平 → 继电器吸合
  • PA0 输出高电平 → 继电器断开

通过延时函数控制高低电平时间,实现继电器循环动作。

2. 代码结构

  • main.c:主逻辑,控制继电器循环吸合 / 断开
  • relay.c:继电器 GPIO 初始化
  • relay.h:函数声明 + 防止重复包含

3. 关键函数说明

  • Relay_Init():初始化 PA0 为推挽输出,用于驱动继电器
  • GPIO_ResetBits():输出低电平,吸合继电器
  • GPIO_SetBits():输出高电平,断开继电器
  • delay(1000):延时约 1 秒

4. 实验现象

  • 继电器每 响一声(吸合)→ 停 1 秒 → 断开
  • 循环不断,直到断电

5. 注意事项

  • 继电器 VCC 必须接 5V,不能接 3.3V
  • 继电器 IN 引脚接单片机 PA0
  • 单片机与继电器必须 共 GND
  • 继电器为 低电平触发

为什么头文件要写:

复制代码
#ifndef RELAY_H_
#define RELAY_H_

void Relay_Init(void);

#endif

防止头文件被重复包含,避免编译报错。

相关推荐
山木嵌入式12 小时前
【STM32实战】轻量级任务调度器实现
stm32·单片机·rtos·任务调度器·裸机开发
guygg8812 小时前
基于霍尔传感器的BLDC控制源码
单片机·嵌入式硬件
ytttr87312 小时前
DSP 28335 CAN总线通信程序
开发语言·stm32·单片机
一枝小雨14 小时前
RISC-V架构sp寄存器 & RISC-V架构下FreeRTOS任务上下文保存与恢复
单片机·架构·嵌入式·risc-v·rtos·内核原理
BW.SU15 小时前
PackagingTool 嵌入式资源打包合并工具
单片机·二进制·嵌入式开发·资源合并软件·图片打包
长安第一美人16 小时前
工业级实时监控系统开发:PHP+ZMQ+JS 前后端分离架构全解析
前端·嵌入式硬件·架构·交互·rk3588·zmq后端
田甲16 小时前
STM32开发环境迁移实践:从 CubeMX 生成 CMake 工程到 VS Code 编译与调试
stm32·单片机·嵌入式硬件
hoiii18716 小时前
在 STM32F1上读取 BMX055 三轴加速度
stm32·单片机·嵌入式硬件
嵌入式小站16 小时前
STM32 零基础可移植教程 04:按键输入,为什么按下去读到的是 0 或 1
chrome·stm32·嵌入式硬件
三佛科技-1873661339717 小时前
BP8522D贴片SOP7,5V150mA高集成度无VCC电容降压型恒压芯片解析
单片机·嵌入式硬件