# RF433Ev1527Lib **Repository Path**: chcsx/RF433Ev1527Lib ## Basic Information - **Project Name**: RF433Ev1527Lib - **Description**: 一个简单的433解码ev1527协议的实现 - **Primary Language**: C - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-06-10 - **Last Updated**: 2026-08-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 一个简单的433解码实现 基于stm32单片机实现的功能模块,只需要一个定时器或者一个中断即可,兼容大多数单片机平台。 ## 一、特性 * 只有一个文件,不依赖其他文件 * 使用回调函数输出键值 ## 二、快速使用 ``` #include "ev1527_decoder.h" ev1527_decoder_t ev1527_decoder; void on_rf433_data(uint32_t data) { // 处理解析出来的数据帧 printf("Received EV1527 data: 0x%06X\n", data); } /** * @brief This function handles TIM17 global interrupt. */ void TIM17_IRQHandler(void) { /* USER CODE BEGIN TIM17_IRQn 0 */ if (LL_TIM_IsActiveFlag_UPDATE(TIM17)) { LL_TIM_ClearFlag_UPDATE(TIM17); ev1527_decoder_on_update(&ev1527_decoder); } if (LL_TIM_IsActiveFlag_CC1(TIM17)) { LL_TIM_ClearFlag_CC1(TIM17); uint16_t duration = LL_TIM_GetCounter(TIM17); LL_TIM_SetCounter(TIM17, 0); ev1527_decoder_on_capture(&ev1527_decoder, LL_GPIO_IsInputPinSet(SIG_IN_GPIO_Port, SIG_IN_Pin), duration); } /* USER CODE END TIM17_IRQn 0 */ /* USER CODE BEGIN TIM17_IRQn 1 */ /* USER CODE END TIM17_IRQn 1 */ } int main(void) { //初始化 ev1527_decoder_init(&ev1527_decoder, on_rf433_data); while(1) { } } ``` # EV1527 433 发射 IO 时序(非阻塞) ## 1. 基本脉宽定义 - 基准时间:T(常用 300~500us,默认 350us) - 码元 0:高电平 1T + 低电平 3T - 码元 1:高电平 3T + 低电平 1T - 同步码:高电平 1T + 低电平 31T 有些模块逻辑相反(低电平发射),可通过 active_high 翻转。 ## 2. 帧结构 - 一帧 24bit:[20bit 地址][4bit 按键数据] - 每个新数据包前都会先发送 1 组同步码(1T 高 + 31T 低) - 发送顺序:MSB first(bit23 到 bit0) - 一次按键通常重复发多帧(默认 repeat = 6) ## 3. 接口注册(GPIO + Timer) 433 模块内部统一注册接口,不用阻塞延时: - 头文件:include ev1527_tx.h - gpio_write(bool level, void *user) - timer_start_us(uint32_t us, void *user)(单次定时) - timer_stop(void *user) ## 4. 使用流程 1. 初始化参数:ev1527_tx_default_cfg(&cfg) 2. 注册接口:ev1527_tx_init(&tx, &cfg, &iface) 3. 组织发送参数:ev1527_tx_req_t req 4. 统一发送入口:ev1527_tx_send(&tx, &req) 5. 定时器到期回调中推进状态机:ev1527_tx_on_timer(&tx) 6. 查询忙状态:ev1527_tx_is_busy(&tx) 7. 循环发送整包后停止:ev1527_tx_request_stop(&tx) 8. 立即中止发送:ev1527_tx_abort(&tx) req 参数说明: - address20:20 位地址 - data4:4 位按键值 - mode:EV1527_SEND_MODE_FINITE 或 EV1527_SEND_MODE_LOOP - repeat:仅在 FINITE 模式有效,填 0 时使用 cfg.repeat ## 5. 主循环 + 定时器示例 ```c static ev1527_tx_t g_tx; static ev1527_tx_req_t g_req; void app_init(void) { ev1527_tx_cfg_t cfg; ev1527_tx_if_t iface; ev1527_tx_default_cfg(&cfg); iface.gpio_write = tx_gpio_write; iface.timer_start_us = tx_timer_start_us; iface.timer_stop = tx_timer_stop; iface.user = NULL; ev1527_tx_init(&g_tx, &cfg, &iface); } void on_key_pressed(void) { g_req.address20 = 0x12345; g_req.data4 = 0x1; g_req.repeat = 0; g_req.mode = EV1527_SEND_MODE_LOOP; // 按下开始循环发 (void)ev1527_tx_send(&g_tx, &g_req); } void on_key_released(void) { // 松手不立刻停,当前完整包发完后停止 ev1527_tx_request_stop(&g_tx); } void timer_isr(void) { // 每次定时到期推进下一段高/低电平 ev1527_tx_on_timer(&g_tx); } ``` ## 6. 调参建议 1. 提速:减小 cfg.t_us(如 350us 到 300us) 2. 抗干扰:增大 cfg.repeat 3. 反相模块:切换 cfg.active_high 单次发送 8 次示例: ```c ev1527_tx_req_t req; req.address20 = 0x12345; req.data4 = 0x1; req.repeat = 8; req.mode = EV1527_SEND_MODE_FINITE; ev1527_tx_send(&g_tx, &req); ```