標(biāo)題:
433MHZ的EV1527無線解碼程序
[打印本頁]
作者:
Leo_L
時(shí)間:
2021-7-23 16:21
標(biāo)題:
433MHZ的EV1527無線解碼程序
要模擬一個(gè) 433MHZ 的1527的遙控器,必須要解出地址碼。自己做了個(gè)解碼程序(MCU為STM32F030)。供需要的人參考。程序已測(cè)試OK。
單片機(jī)源程序如下:
/**
******************************************************************************
* @file HS1527.c
* @author Gang
* @version V1.0.1
* @date 2021-7-5
* @brief
******************************************************************************
* Pin Information:
* RF_Data_Sr PA0
*
*
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "HS1527.h"
#include "Task.h"
/* Private defines -----------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
/*
* nRF GPIO Config
*/
void RF_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
// EXTI_InitTypeDef EXTI_InitStruct;
NVIC_InitTypeDef NVIC_InitStruct;
/* Enable EXIT INT GPIO clocks */
RCC_AHBPeriphClockCmd(RF_IRQ_GPIO_CLK,ENABLE);
GPIO_InitStruct.GPIO_Pin=RF_IRQ_PIN;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN;
GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;
GPIO_Init(RF_IRQ_GPIO_PORT,&GPIO_InitStruct);
// /* Connect EXTI0 Line to PA0 pin */
// SYSCFG_EXTILineConfig(RF_EXIT_PORT,RF_EXIT_SOURCE);
//
// /* Configure EXTI0 line */
// EXTI_InitStruct.EXTI_Line=EXTI_Line0;
// EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;
// EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Rising_Falling;
// EXTI_InitStruct.EXTI_LineCmd=ENABLE;
// EXTI_Init(&EXTI_InitStruct);
//
// /* Enable and set EXTI0_1 Interrupt */
// NVIC_InitStruct.NVIC_IRQChannel=EXTI0_1_IRQn;
// NVIC_InitStruct.NVIC_IRQChannelPriority=0;
// NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
// NVIC_Init(&NVIC_InitStruct);
//
}
/*
* 解碼
*/
bool bRF_HEAD_OK=0;
bool bRF_RecOk=0;
bool bLevelFlag=0;
uint8_t u8HighCnt=0;
uint8_t u8LowCnt=0;
uint8_t u8bitCnt=0;
#define HEAD_HIGH_MAX 7
#define HEAD_HIGH_MIN 2
#define HEAD_LOW_MAX 130
#define HEAD_LOW_MIN 100
#define LOW_MAX 7
#define LOW_MIN 2
#define HIGH_MAX 13
#define HIGH_MIN 8
#define Compare 23
uint32_t u32Code=0;
uint32_t u32CodeBuf=0;
uint8_t u8RxBuf[4]={0};
uint8_t u8RxBuf1[4]={0};
bool bCheckFlag=0;
#include "Sensor.h"
void RF_Decode(void)
{
static uint8_t u8Tick=0;
if(ReadRF_GPIO) //高電平
{
u8HighCnt+=1;
bLevelFlag=1;
}
else //低電平電平
{
u8LowCnt+=1;
u8Tick+=1;
if(bLevelFlag) //檢測(cè)到同步碼
{
if(((u8HighCnt>=HEAD_HIGH_MIN)&&(u8HighCnt<=HEAD_HIGH_MAX))&&\
((u8LowCnt>=HEAD_LOW_MIN)&&(u8LowCnt<=HEAD_LOW_MAX)))
{
bRF_HEAD_OK=1;
u8bitCnt=0;
u8Tick=0;
}
else if((bRF_HEAD_OK)&&((u8HighCnt>=HIGH_MIN)&&(u8HighCnt<=HIGH_MAX))) //1
{
u32Code<<=1;
u32Code|=0x00000001; // 1
u8bitCnt+=1;
if(u8bitCnt>=Compare)
{
bRF_HEAD_OK=0;
u32CodeBuf=u32Code;
bCheckFlag=1-bCheckFlag;
if(bCheckFlag)
{
u8RxBuf[0]=u32Code>>12;
u8RxBuf[1]=u32Code>>4;
u8RxBuf[2]=u32Code&0x0f;
}
else if(u8Tick<=50)
{
u8RxBuf1[0]=u32Code>>12;
u8RxBuf1[1]=u32Code>>4;
u8RxBuf1[2]=u32Code&0x0f;
}
else
{
u8Tick=0;
u8RxBuf[0]=0;
u8RxBuf[1]=0;
u8RxBuf[2]=0;
u8RxBuf1[0]=0;
u8RxBuf1[1]=0;
u8RxBuf1[2]=0;
}
if((u8RxBuf[0]==u8RxBuf1[0])&&(u8RxBuf[1]==u8RxBuf1[1])&&(u8RxBuf[2]==u8RxBuf1[2]))
{
bRF_RecOk=1;
}
u32Code=0;
}
}
else if((bRF_HEAD_OK)&&((u8HighCnt>=LOW_MIN)&&(u8HighCnt<=LOW_MAX))) //0
{
u32Code<<=1;
u32Code&=0xfffffffe; // 0
u8bitCnt+=1;
if(u8bitCnt>=Compare)
{
bRF_HEAD_OK=0;
u32CodeBuf=u32Code;
bCheckFlag=1-bCheckFlag;
if(bCheckFlag)
{
u8RxBuf[0]=u32Code>>12;
u8RxBuf[1]=u32Code>>4;
u8RxBuf[2]=u32Code&0x0f;
}
else if(u8Tick<=50)
{
u8RxBuf1[0]=u32Code>>12;
u8RxBuf1[1]=u32Code>>4;
u8RxBuf1[2]=u32Code&0x0f;
u8Tick=0;
}
else
{
u8Tick=0;
u8RxBuf[0]=0;
u8RxBuf[1]=0;
u8RxBuf[2]=0;
u8RxBuf1[0]=0;
u8RxBuf1[1]=0;
u8RxBuf1[2]=0;
}
if((u8RxBuf[0]==u8RxBuf1[0])&&(u8RxBuf[1]==u8RxBuf1[1])&&(u8RxBuf[2]==u8RxBuf1[2]))
{
bRF_RecOk=1;
}
u32Code=0;
}
}
else
{
u8bitCnt=0;
u8LowCnt=1;
u8HighCnt=0;
}
u8LowCnt=1;
u8HighCnt=0;
u8Tick=0;
}
bLevelFlag=0;
}
if(bRF_RecOk)
{
bRF_RecOk=0;
if(u8RxBuf[2]==0x01)
{
bRunLock=1;
bUP=1;
bDN=0;
}
else if(u8RxBuf[2]==0x02)
{
bRunLock=1;
bDN=1;
bUP=0;
}
else if(u8RxBuf[2]==0x04)
{
bRunLock=0;
bUP=0;
bDN=0;
}
u8RxBuf[0]=0;
u8RxBuf[1]=0;
u8RxBuf[2]=0;
u8RxBuf1[0]=0;
u8RxBuf1[1]=0;
u8RxBuf1[2]=0;
}
}
復(fù)制代碼
/**
******************************************************************************
* @file HS1527.h
* @author Gang
* @version V1.0.0
* @date 2021-7-5
* @brief
******************************************************************************
* @History
*
* Pin Information:
* RF_Data_Sr PA0
*
******************************************************************************
*/
#ifndef _HS1527_H_
#define _HS1527_H_
/* Includes ------------------------------------------------------------------*/
#include "stm32f0xx.h"
//Code代碼移植區(qū)
#define RF_IRQ_PIN GPIO_Pin_0
#define RF_IRQ_GPIO_PORT GPIOA
#define RF_IRQ_GPIO_CLK RCC_AHBPeriph_GPIOA
#define RF_EXIT_SOURCE EXTI_PinSource0
#define RF_EXIT_PORT EXTI_PortSourceGPIOA
#define ReadRF_GPIO (RF_IRQ_GPIO_PORT->IDR&RF_IRQ_PIN)
void RF_GPIO_Config(void);
void RF_Decode(void);
#endif
復(fù)制代碼
51hei.png
(4.49 KB, 下載次數(shù): 68)
下載附件
2021-7-23 16:41 上傳
以上2個(gè)代碼文件
作者:
愛電子998
時(shí)間:
2021-7-23 21:18
如果想做一個(gè)優(yōu)秀的程序員,注釋是非常必要的
作者:
lkk31
時(shí)間:
2021-8-23 17:56
沒看到Task.h
作者:
fenghe
時(shí)間:
2021-10-27 10:30
代碼要是能有注釋,會(huì)有利于更好理解
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1