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

news2024/11/25 21:43:41

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.coloradmin.cn/o/1607105.html

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

相关文章

node-mysql数据库的下载与安装

01 mysql数据库的安装 网址&#xff1a;mysql.com/downloads/ 打开之后往下翻 点击 MySQL Community (GPL) Downloads 》 点击 MySRL Community Server 再点击 No thanks,just stant my download. 02 安装mysql 03 安装完成之后检查mysql服务是否开启 services.msc 04 启动…

vue3【详解】 vue3 比 vue2 快的原因

使用 Proxy 实现响应式 vue3使用的 Proxy 在处理属性的读取和写入时&#xff0c;比vue2使用的defineProperty 有更好的性能&#xff08;速度加倍的同时&#xff0c;内存还能减半&#xff01;&#xff09; 更新类型标记 Patch Flag 在编译模板时&#xff08;将vue语法转换为js描…

Seal^_^【送书活动第一期】——《Vue.js+Node.js全栈开发实战(第2版)》

Seal^_^【送书活动第一期】——《Vue.jsNode.js全栈开发实战&#xff08;第2版&#xff09;》 一、参与方式二、本期推荐图书2.1 前 言2.2 作者简介2.3 图书简介2.4 本书特色2.5 编辑推荐2.6 书籍目录 三、正版购买 一、参与方式 1、关注博主的账号。 2、点赞、收藏、评论博主的…

如何判断两个IP地址是否在同一网段?

要判断两个IP地址是否在同一网段&#xff0c;首先需要对IP地址和子网掩码有深入的理解。IP地址是互联网协议地址&#xff0c;用于在IP通信中标识和定位每台设备的逻辑地址。而子网掩码则是一个32位的地址掩码&#xff0c;用于将IP地址划分为网络地址和主机地址两部分。通过比较…

9月BTE第8届广州国际生物技术大会暨展览会,全媒体聚焦下的高精尖行业盛会

政策春风助力&#xff0c;共迎大湾区生物医药行业50亿红利 今年3月“创新药”首次写入国务院政府工作报告之后&#xff0c;广州、珠海、北京多地政府纷纷同步出台了多项细化政策&#xff0c;广州最高支持额度高达50亿元&#xff0c;全链条为生物医药产业提供资金支持&#xff…

【C++】开始了解反向迭代器

送给大家一句话&#xff1a; 重要的东西眼睛是看不到的 — 《小王子》 反向迭代器 1 前言2 反向迭代器3 复刻反向迭代器3.1 加减操作3.2 判断操作3.3 访问操作 4 链表的反向迭代器Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢阅读&#xff01;&#xff01;&#xff0…

SQVI创建以及生成程序

SAP数据快速查询工具&#xff1a;Sqvi-QuickView 项目实施&运维阶段&#xff0c;为了快速获取一些透明表数据&#xff0c;一开始接触项目肯定会通过大量的数据表查找&#xff0c;然后线下通过EXCEL通过VLOOKUP进行数据关联&#xff0c;这种方式在关联数据较少的情况比较适应…

【源码】2024新版二开版抢单刷单系统,前端简体、繁体双语言-支持倒计时抢单,后台指定派单连单卡单

CD&#xff1a;获取方式联系小编 微信&#xff1a;uucodes 公众号&#xff1a;资源猿 小编提供资源代找&#xff0c;环境搭建&#xff0c;源码部署调试等业务&#xff0c;需要的可以联系

APP广告变现项目要怎么去做,需要考虑哪些方面!!

要开始一个APP广告变现项目&#xff0c;您可以按照以下步骤进行操作&#xff1a; 制定商业计划&#xff1a;确定您的目标市场、目标受众和变现方式。了解竞争对手和市场趋势&#xff0c;并制定相应的推广策略。 开发APP&#xff1a;找到合适的开发团队或开发者来设计和开发您…

机器学习在安全领域的应用:从大数据中识别潜在安全威胁

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导…

微纤维眼镜清洁布的革命性进化

在日常生活中&#xff0c;眼镜是许多人不可或缺的日常用品&#xff0c;无论是视力矫正还是防护眼睛免受阳光的伤害。然而&#xff0c;眼镜的清洁常常是一个令人头疼的问题&#xff0c;特别是在面对指纹、灰尘和其他污垢时。传统的清洁方法往往需要化学清洁剂&#xff0c;不仅繁…

Spring Boot 中Mybatis使用Like的使用方式和注意点

说明 模糊查询在项目中还是经常使用的&#xff0c;本文就简单整理Mybatis中使用Like进行模糊查询的几种写法以及一些常见的问题。 使用Springboot简单配置一下Mybatis&#xff0c;然后进行说明。Springboot集成Mybatis这里就不做介绍了&#xff0c;这里我们主要介绍一下在mybat…

【leetcode面试经典150题】59. 合并两个有序链表(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主&#xff0c;题解使用C语言。&#xff08;若有使用其他语言的同学也可了解题解思路&#xff0c;本质上语法内容一致&…

Mac下XDebug安装

文章目录 1、下载对应的版本2、编译XDebug3、配置XDebug4、配置PhpStormDebug一下 前置工作 Mac下安装HomebrewMac下brew安装php7.4 1、下载对应的版本 首先按照支持的版本和兼容性来下载对应的版本&#xff0c;此表列出了仍支持哪些 Xdebug 版本&#xff0c;以及哪些版本可用…

SPI总线通讯协议

文章目录 SPIQSPISPI配置SPI读写一个字节W25Q128初始化读取SPI FLASH写SPI FLASH SPI SPI:串行外围设备接口(Serial peripheral interface)&#xff0c;一种高速&#xff0c; 全双工、同步的通信总线。 SPI使用4条线通信&#xff1a; MISO&#xff1a;主设备数据输入&#xf…

为主机配置IP

第一种方法:nmcli #nmcli connection modify eth0 ipv4.method manual ipv4.addresses 172.25.254.100/24 ipv4.gateway 172.25.254.2 ipv4.dns 114.114.114.114 autoconnect yes #nmcli c up etho //激活网卡命令(网卡早就配好,只是修改ip就不用输入这条命令了) 第二…

【解决】echarts条形图纵坐标显示不全

先说结论&#xff1a; option:{...grid: {containLabel: true},... }这个属性是控制整体的坐标标签的。加上这个就可以显示完整了。然后再根据其他属性调整标签的字体、颜色之类的 yAxis : [{...axisLabel:{width:100,overflow:break,truncate:...,color:red,fontSize:10,},..…

PHP定时任务框架taskPHP3.0学习记录5环境部署常见问题及解决方案

php版本问题 当出现一下错误&#xff0c;说明php版本不支持&#xff0c;建议升级php版本&#xff0c;至少>5.6 Failed loading /usr/local/zend/php55/ZendGuardLoader.so: /usr/local/zend/php55/ZendGuardLoader.so: undefined symbol: zval_used_for_init PHP Warning:…

计算机网络:CSMA/CA协议

计算机网络&#xff1a;CSMA/CA协议 CSMA/CA概述帧间间隔工作原理退避算法虚拟载波监听 CSMA/CA概述 讲解CSMA/CA之前&#xff0c;我们回顾一下CSMA/CD的三个特性&#xff1a; 多址接入MA&#xff1a;多个主机连接在一条总线上&#xff0c;竞争使用总线 载波监听CS&#xff1a…

Grass注册不了、按钮灰色的解决方案

近期相信grass挂机项目不少人有所有接触。还有不了解这个项目的可以看看博客&#xff1a; http://t.csdnimg.cn/bI4UO 但是不少人注册时遇到无法注册的问题&#xff0c;或者是注册按钮显示灰色&#xff0c;放上鼠标时显示禁止。这也是博主在尝试时遇到的问题。 经过探索&…