STM32——433M无线遥控灯

一、项目功能

本项目使用 433M 无线接收模块 控制 STM32 开发板上的 LED 灯:

  • 433M 模块 D0 输出高电平 → PA0 收到信号 → LED 点亮
  • 433M 模块 D1 输出高电平 → PA2 收到信号 → LED 熄灭
  • 无信号时,LED 保持当前状态不变

二、硬件接线

  • 433M 模块 D0 → STM32 PA0
  • 433M 模块 D1 → STM32 PA2
  • LED → PA1(低电平点亮)
  • 模块 VCC → 3.3V / 5V
  • 模块 GND → 开发板 GND

三、完整代码

main.c 主程序文件

复制代码
// STM32 标准库头文件
#include "stm32f10x.h"
// 工程主头文件
#include "main.h"
// LED驱动头文件
#include "led.h"
// 433M无线模块驱动头文件
#include "rf433m.h"

/**
  * @brief  主函数,程序上电入口
  * @retval int
  */
int main()
{
	// 初始化LED引脚 PA1
	LED_Init();
	// 初始化433M无线模块接收引脚 PA0、PA2
	RF433M_Init();
	
	// 默认状态:PA1输出高电平 → LED熄灭
	GPIO_SetBits(GPIOA, GPIO_Pin_1);   
	
	// 死循环:持续检测433M模块信号
	while(1)
    {
		// 如果 433M D0(PA0)收到高电平信号
		if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 1)
		{
			// PA1输出低电平 → 点亮LED
			GPIO_ResetBits(GPIOA, GPIO_Pin_1);		  
		}
		// 如果 433M D1(PA2)收到高电平信号
		else if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2) == 1)
		{
			// PA1输出高电平 → 熄灭LED
			GPIO_SetBits(GPIOA, GPIO_Pin_1);   
		}
    }
}

rf433m.c 433M 模块驱动

复制代码
// STM32 标准库
#include "stm32f10x.h"
// 433M模块头文件
#include "rf433m.h"

/**
  * @brief  433M无线接收模块初始化
  * @param  无
  * @retval 无
  */
void RF433M_Init(void)
{
	// 定义GPIO初始化结构体
	GPIO_InitTypeDef RF433M_Initstruct;
	
	// 开启GPIOA时钟(必须开时钟才能用GPIO)
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	// 配置 PA0 和 PA2 两个引脚
	RF433M_Initstruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_2; 
	// 上拉输入模式:默认高电平,信号触发时为高电平
	RF433M_Initstruct.GPIO_Mode = GPIO_Mode_IPU; 	 
	
	// 初始化GPIO
	GPIO_Init(GPIOA, &RF433M_Initstruct);			
}

led.c LED 驱动

复制代码
// LED头文件
#include "led.h"
// STM32标准库
#include "stm32f10x.h"

/**
  * @brief  LED初始化函数
  * @param  无
  * @retval 无
  */
void LED_Init(void)
{
	// 定义GPIO初始化结构体
	GPIO_InitTypeDef led_initstruct; 
	
	// 开启GPIOA时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	// 配置 PA1 引脚
	led_initstruct.GPIO_Pin  = GPIO_Pin_1;
	// 输出速度 2MHz
	led_initstruct.GPIO_Speed  = GPIO_Speed_2MHz;
	// 推挽输出模式
	led_initstruct.GPIO_Mode  = GPIO_Mode_Out_PP;
	
	// 初始化GPIO
	GPIO_Init(GPIOA, &led_initstruct);
}

rf433m.h 头文件

复制代码
// 防止头文件重复包含
#ifndef RF433M_H_
#define RF433M_H_

// 433M模块初始化函数声明
void RF433M_Init(void);

#endif

led.h 头文件

复制代码
// 防止头文件重复包含
#ifndef LED_H_
#define LED_H_

// LED初始化函数声明
void LED_Init(void);

#endif

四、代码

1. 整体逻辑

  • PA0:接收 433M 模块 D0 信号 → 控制 LED 点亮
  • PA2:接收 433M 模块 D1 信号 → 控制 LED 熄灭
  • PA1:控制 LED 亮灭

2. 433M 模块工作原理

433M 接收模块有两路输出:

  • D0 有信号 → 输出高电平 → PA0 读到 1 → 点灯
  • D1 有信号 → 输出高电平 → PA2 读到 1 → 灭灯

模块无信号时,引脚保持低电平,程序不动作。

注意遥控器上的ABCD按键不一定是按顺序对应的D0,D1,D2,D3

3. 模块化设计

  • main.c:主逻辑,判断信号 + 控制 LED
  • rf433m.c/h:433M 模块驱动,配置 PA0、PA2 为输入
  • led.c/h:LED 驱动,配置 PA1 为输出

4. 关键 GPIO 模式说明

  • **PA0、PA2:上拉输入(IPU)**用于接收外部模块信号,稳定可靠
  • **PA1:推挽输出(Out_PP)**用于驱动 LED,可输出强高低电平

5. 实验现象

  • 433M 发射端按A→ LED 亮
  • 433M 发射端按B → LED 灭
  • 无操作时 LED 保持状态

我的遥控器的按键恰好是按顺序对应的D0,D1,D2,D3

相关推荐
XD7429716361 小时前
001. MSP430G2553 入门总述:从零开始学习这颗单片机
单片机·嵌入式硬件·学习·嵌入式·msp430g2553
模拟IC攻城狮2 小时前
华为2026 年校园招聘——硬件技术工程师-电源方向-机试题(12套)(每套四十题)
嵌入式硬件·华为·硬件架构·芯片
阿哟阿哟2 小时前
立创3D模型快速下载
笔记·单片机·嵌入式硬件
三佛科技-134163842122 小时前
FT62F0GCA-LRB智能温控仪上的应用优势分析
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
国产芯片设计2 小时前
小家电驱动开发实战:远乐YL1628在电饭煲显示面板的应用与调试
单片机·嵌入式硬件·mcu·51单片机·硬件工程
Wallace Zhang2 小时前
SimpleFOC源码学习09(v2.3.2) - 磁编码器MagneticSensorSPI.cpp与MagneticSensorSPI.h
驱动开发·stm32·simplefoc·foc电机控制
LCMICRO-133108477462 小时前
长芯微LD1871完全P2P替代AD1871,是一款立体声音频ADC
单片机·嵌入式硬件·fpga开发·音视频·硬件工程·dsp开发·音频adc
12.=0.2 小时前
【stm32_7】定时器的原理与应用、基本定时器、通用定时器、PWM、模拟脉冲信号的宽度、利用PWM控制外设、逻辑分析仪的使用
c语言·stm32·单片机·嵌入式硬件
Deitymoon2 小时前
STM32——振动传感器控制继电器
stm32·单片机·嵌入式硬件