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

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

相关推荐
十月的皮皮30 分钟前
STM32从零到量产开发:四路继电器工业控制模块开发实战笔记(小白视角)
c语言·笔记·stm32·stm32cubemx·hal库
2CM_Embed1 小时前
F28379D 下载后 VOFA+ 无数据、Reset 后恢复:一次 TZ 中断误触发排查记录
笔记·单片机·sci·c2000·f28379d·vofa·tz
国科安芯1 小时前
空间机电一体化:AS32S601型抗辐射MCU在卫星推进与执行机构控制中的关键技术研究
单片机·嵌入式硬件·物联网·机器人·云计算
国科安芯1 小时前
AS32S601型抗辐射MCU在分布式太空算力架构中的技术演进与应用前景
人工智能·分布式·单片机·嵌入式硬件·架构·边缘计算
国科安芯2 小时前
在轨能源中枢:AS32S601型抗辐射MCU在卫星电源管理与配电系统中的控制策略研究
嵌入式硬件·架构·能源·risc-v·sps·电源管理·卫星
纯音乐sjc2 小时前
ARM Linux 嵌入式中断全流程解析:从 GPIO 到 GIC 架构实战
单片机·嵌入式硬件
雯宝2 小时前
|____1.4外部中断/看门狗/定时器/PWM/RTC/待机唤醒/ADC/DAC/IIC/SPI/485/CAN
单片机
sramdram17 小时前
基于32位微控制器的FOC汽车水泵方案
单片机·嵌入式硬件·汽车·微控制器·32位微控制器
十月的皮皮19 小时前
stm20260720-从新手 C 到量产 STM32 工程:程序设计推导指南
c语言·开发语言·stm32·stm32cubemx·hal库
开发笔记-阿牛19 小时前
解析一款有意思的产品||CK6159A语音芯片设计的儿童专注力训练机-舒尔特玩具
stm32·单片机·嵌入式硬件·音频