STM32使用HAL库解码433遥控芯片EV1527

1、首先了解一下433遥控芯片ev1527的基本资料:

这是他编码的关键信息:
在这里插入图片描述
也就是说,一帧数据是:一个同步码+20位内码+4位按键码。
内码20位=2^20=1048576个地址。
发送就是一帧数据接一帧数据不间断发送。

2、解码思路

从上面的帧结构来分析,我的解码思路是:
1、STM32单片机配置一个引脚中断,设置为上下沿触发
2、单片机配置1个定时器,用于记录时间
3、抓住关键特征,可以看到,同步码是一帧数据的开头,它的特征是124CLK的低电平时间,所以:
3.1、测量这一帧数据的低电平时间,
3.2、如果低电平时间为124clk,就认为收到同步码,接下来要开始收数据码
3.3、收到同步码后,不断测量数据码的低电平时间,并存入BUF[24]这个数组,
3.4、接收完24个低电平后,一帧数据接收完毕。如果中途接收到同步码,就从头开始接收数据码。
3.5、解码:DATA(H)的低电平是4CLK,DATA(L)的低电平是12CLK,分析数组中的低电平时间,就可以完成解码。

3、配置

定时器配置:
在这里插入图片描述
IO口配置为上下边沿触发
在这里插入图片描述
记得打开中断
在这里插入图片描述

4、程序编写

首先头文件:

#ifndef __EV1527_H
#define __EV1527_H#include "main.h"typedef struct
{uint8_t ucRecOK;	/*接收成功*/uint8_t ucKeyCode;	/*按键码*/uint32_t ulChipID;	/*芯片ID*/uint16_t usaLowTime[24];/*24位低电平数据时间长度*/
}ev1527Type_T;extern ev1527Type_T g_tEV1527Rx;void EV1527_Decode(ev1527Type_T *tpEV1527);/*EV1527解码*/
#endif

再C文件:

#include "ev1527.h"
#include "tim.h"ev1527Type_T g_tEV1527Rx;/*
******************************************************
* 说明:PA0引脚中断回调函数,上下边沿中断配合定时器1,统计低脉冲宽度,因为引导码的特征值是低脉冲宽度是124CLK。
* 输入:
* 输出:
******************************************************
*/
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{uint16_t usPortLevel;uint16_t usLowTime;static uint8_t ucLeadCodeFind = 0;static uint8_t ucTimePos;	usPortLevel = GPIOA->IDR & 0X0001;if(usPortLevel)/*上升沿,完成低脉冲检测*/{usLowTime = __HAL_TIM_GetCounter(&htim1);__HAL_TIM_DISABLE(&htim1);if(usLowTime > 9920 &&  usLowTime < 14880)/*引导码,12400,误差20%*/{ucLeadCodeFind = 1;ucTimePos = 0;}/*可先进行低电平时间判断,滤除杂波干扰*/else/*其他低脉冲*/{if(ucLeadCodeFind)/*只有找到引导码的情况下,才进行数据接收*/{g_tEV1527Rx.usaLowTime[ucTimePos++] = usLowTime;if(ucTimePos >= 24){ucTimePos = 0;ucLeadCodeFind = 0;g_tEV1527Rx.ucRecOK = 1;/*置位接收完成标志*/}}}}else/*下降沿,启动低脉冲宽度检测*/{__HAL_TIM_SetCounter(&htim1,0);	__HAL_TIM_ENABLE(&htim1);}
}
/*
******************************************************
* 说明:解码EV1527,使用低电平时间判断,低电平280-520ms之内,判断为1,否则为0;
* 输入:tpEV1527指针,解码完毕后,赋值到指向的结构体中的按键码和芯片ID;
* 输出:
******************************************************
*/
void EV1527_Decode(ev1527Type_T *tpEV1527)
{uint8_t i;uint32_t ulCombinedCode = 0;for(i=0; i< 24; i++)/**/{ulCombinedCode <<= 1; /** 400us,误差±30%。* 示波器实测最后一位的低电平时间比其他位的低电平时间要长,可考虑增加宽度。* 可能是发射芯片发射完最后一位后,转入到引导脉冲所需时间比较长导致。*/if(tpEV1527->usaLowTime[i] > 280 && tpEV1527->usaLowTime[i] < 520){ulCombinedCode |= 0x01;}}tpEV1527->ucKeyCode = ulCombinedCode & 0x0000000f;tpEV1527->ulChipID = (ulCombinedCode & 0xfffffff0) >> 4;
}

文件说明:
在这里插入图片描述
接收一帧数据后,就是解码了
在这里插入图片描述
注释已经写得非常明白了。

5、使用

直接在main函数里面判断是否接收完成,然后调用解码即可:

        if(g_tEV1527Rx.ucRecOK){g_tEV1527Rx.ucRecOK = 0;EV1527_Decode(&g_tEV1527Rx);			}

实际解码如下图:
在这里插入图片描述
在这里插入图片描述

6、写在最后

1、直接示波器测量4CLK的时间长度,不要用计算振荡电阻的结果。
2、有些芯片在发完最后一个数据位,然后紧接发同步脉冲的高电平,不知道是他们的芯片速度问题还是其他原因,最后一个数据位的低电平时间,要比其他数据位的低电平时间要长。所以,在判断的时候,要特殊关注一下。这个问题在我的解码函数里面有注释。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/774.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数运算(加法和除法)

声明:写法是多样的&#xff0c;下面仅仅是我比较喜欢的写法。另外&#xff0c;这里的除法是高精/低精。实际题目里面&#xff0c;反正我没见过高精/高精的。 AB: #include <bits/stdc.h> using namespace std; const int inf 0x3f3f3f3f; #define ll long long int a[…

C++中的模板类pair

目录 一、成员函数 一、构造函数 二、赋值运算符重载 operator 三、交换函数 swap 二、非成员函数重载 一、关系运算符重载 二、交换函数 swap 三、获取数据 get 三、See also 一、无需写类型创建pair对象 make_pair pair是一个模板类&#xff0c;可以存储两个值的有…

Jmeter测试学习笔记

第一章 jmeter基础知识 一.Jmeter工具中的组件 1.测试计划&#xff1a;Jmeter测试的起点。容器。 2.线程组&#xff1a;代表一定的用户 3.取样器&#xff1a;发送请求的最小单元 4.逻辑控制器&#xff1a;处理请求逻辑 5.前置处理器&#xff1a;请求之前的操作 6.后置处…

公网IP地址如何申请SSL证书?有免费的IP ssl吗?

如果用户没有域名或只有公网IP地址或者不方便使用域名&#xff0c;IP地址ssl证书这一特殊的证书可以为IP地址实现HTTPS的安全保护&#xff0c;提高网站数据传输的安全性。 IP地址申请SSL证书的基本步骤 IP ssl证书下载---注册填写230916https://www.joyssl.com/certificate/sel…

面经学习(上海旭千实习)

个人总结 难度中等&#xff0c;Java的基础部分有点忘了&#xff0c;还有那个token的实现流程也有点给忘了&#xff0c;项目问的比较少&#xff0c;还是要注重Java基础部分的复习。 1.jdk8和jdk7有什么区别呢&#xff1f; jdk8的新特性主要就是流式编程和lambda&#xff0c;区…

什么是Java中的JPA(Java持久化API)

Java持久化API&#xff08;Java Persistence API&#xff0c;简称JPA&#xff09;是一个用于管理Java EE和Java SE环境中关系数据的标准API。JPA是Java EE 5的一部分&#xff0c;但它也可以在Java SE环境中使用。JPA提供了一个对象关系映射&#xff08;ORM&#xff09;框架&…

都是AI的锅?越来越多海外用户抛弃谷歌,转向TikTok和Reddit搜索答案

媒体报道&#xff0c;谷歌搜索的算法已经被AI驱动的搜索引擎优化&#xff08;SEO&#xff09;垃圾邮件淹没&#xff0c;推送结果充斥低质量内容&#xff0c;甚至整个互联网都充斥着AI剽窃、生成的无价值内容。 AI大潮的到来&#xff0c;让几大科技巨头感到紧张&#xff0c;谷歌…

数据可视化(五):Pandas高级统计——函数映射、数据结构、分组聚合等问题解决,能否成为你的工作备用锦囊?

Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢我的博客的话&#xff0c;记得…

【不看后悔】AGI时代,这些工具真的能让你收入翻倍!

引言 在数字化浪潮中&#xff0c;AIGC已经成为不可或缺的一部分 无论你是一名内容创作者&#xff0c;还是简单的社交媒体用户&#xff0c;免费的AI工具都能在多个层面助你一臂之力。这些工具涵盖从文本创作到图像设计&#xff0c;再到视频制作等多个方面&#xff0c;不仅可以…

Amazon云计算AWS之[1]基础存储架构Dynamo

文章目录 Dynamo概况Dynamo架构的主要技术主要问题及解决方案Dynamo的存储节点数据均衡分布的问题一致性哈希算法改进一致性哈希算法 数据备份数据冲突问题成员资格及错误检测容错机制临时故障处理机制永久性故障处理机制 Dynamo概况 面向服务的Amazon平台基本架构为了保证其稳…

什么是嵌套路由?如何定义嵌套路由

嵌套路由是路由的一个特性&#xff0c;它允许在一个路由组件内部定义其他的路由组件。在Web前端中&#xff0c;嵌套路由的实现通常基于项目中的页面结构&#xff0c;特别是当页面由多层嵌套的组件组合而成时。嵌套路由的主要目的是在路由内部嵌套子路由&#xff0c;以便根据导航…

Java 随笔记: 面向对象编程(三)

目录 1. 类变量 2. 类方法 3. main 方法 4. 代码块 5. 单例设计模式 6. final 关键字 8. 抽象类 9. 模板设计模式 10. 接口 11. 内部类 1. 类变量 在Java中&#xff0c;类变量也被称为静态变量&#xff0c;用关键字“static”声明。类变量属于整个类&#xff0c;而不…

C语言学习/复习24---

一、指针的进阶 1.指针的类型 2.字符指针 注意事项1&#xff1a;数组名是首元素地址&#xff0c;指针变量存储地址 3.指针数组 4.数组指针 注意事项1:&数组名与数组名 案例1&#xff1a;数组地址与数组首元素地址 数组地址的使用&#xff1a; ​​​…

理解字符串常量池(JVM)

大纲 思考 如何查看字符串常量池&#xff08;StringTable&#xff09;&#xff1f; 使用 jclasslib 插件打开字节码&#xff0c;选择 常量池 -> 显示所选 -> CONSTANT_String_info&#xff0c;左侧过滤后的内容即为字符串常量池 字符串常量池、方法区、永久代和元空间的…

如何将你的iOS应用成功上架App Store(图文详解)

上架基本需求资料 1、苹果开发者账号&#xff08;如还没账号先申请- 苹果开发者账号申请教程&#xff09; 2、开发好的APP 通过本篇教程&#xff0c;可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestFlight测试然后提交审核的完整流程&#xff01; …

草稿 | word格式的网址索引

参考文献引用 参考文献上标设置&#xff1a;&#xff08;改为上标的快捷键为ctrlshift“”&#xff09; https://jingyan.baidu.com/article/cbcede07d786c743f50b4d47.html 多个参考文献一起引用&#xff1a; https://blog.csdn.net/neptune4751/article/details/119921187 交…

如何在 Ubuntu VPS 上配置 Nginx 的日志记录和日志轮转

简介 为了避免在 Web 服务器上遇到麻烦&#xff0c;您可以配置日志记录。在服务器上记录信息可以让您访问数据&#xff0c;帮助您在出现问题时进行故障排除和评估情况。 在本教程中&#xff0c;您将了解 Nginx 的日志记录功能&#xff0c;并发现如何配置这些工具以最好地满足…

社交媒体数据恢复:与你科技

在数字时代&#xff0c;数据是我们生活中的重要组成部分。无论是个人照片、文档&#xff0c;还是企业的重要资料&#xff0c;数据在我们的生活中扮演着举足轻重的角色。然而&#xff0c;数据丢失的问题时常发生&#xff0c;给我们带来了很多麻烦。幸运的是&#xff0c;当下众多…

UE4 拍摄、保存并浏览相册

效果&#xff1a; 1.新建CameraActor类 2.修改截图保存路径 3.编写BP_Camera蓝图 注意路径 Save Image函数要在执行拍照和BeginPlay事件执行一次 按钮执行拍摄事件 3.编写UMG蓝图 技巧&#xff1a;让Index加1、减1循环赋值 4.把BP_Camera挂在玩家上

步步精科技获得发明型专利,提升Type-C连接器行业竞争力

在电子科技日新月异的时代&#xff0c;连接器作为电子设备中不可或缺的一部分&#xff0c;其安全性、稳定性和性能水平直接关系到设备的使用效果和用户体验。深圳市步步精科技有限公司&#xff08;以下简称“步步精科技”&#xff09;一直致力于连接器领域的技术创新和产品研发…