找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4217|回复: 3
打印 上一主题 下一主题
收起左侧

433MHZ的EV1527无线解码程序

[复制链接]
跳转到指定楼层
楼主
要模拟一个 433MHZ 的1527的遥控器,必须要解出地址码。自己做了个解码程序(MCU为STM32F030)。供需要的人参考。程序已测试OK。

单片机源程序如下:
  1. /**
  2.   ******************************************************************************
  3.   * @file    HS1527.c
  4.   * @author  Gang
  5.   * @version V1.0.1
  6.   * @date    2021-7-5
  7.   * @brief   
  8.   ******************************************************************************
  9.   * Pin Information:
  10.         *                                                                                RF_Data_Sr         PA0
  11.         *                                                                        
  12.   *
  13.   ******************************************************************************
  14.   */

  15. /* Includes ------------------------------------------------------------------*/

  16. #include "HS1527.h"
  17. #include "Task.h"

  18. /* Private defines -----------------------------------------------------------*/

  19. /* Private function prototypes -----------------------------------------------*/

  20. /* Private functions ---------------------------------------------------------*/




  21. /*
  22. *        nRF GPIO Config
  23. */


  24. void RF_GPIO_Config(void)
  25. {
  26.         GPIO_InitTypeDef GPIO_InitStruct;
  27. //        EXTI_InitTypeDef EXTI_InitStruct;
  28.         NVIC_InitTypeDef NVIC_InitStruct;
  29.         
  30.   
  31.         /* Enable EXIT INT GPIO clocks */
  32.   RCC_AHBPeriphClockCmd(RF_IRQ_GPIO_CLK,ENABLE);  
  33.         
  34.         GPIO_InitStruct.GPIO_Pin=RF_IRQ_PIN;
  35.   GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN;
  36.   GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;        
  37.         
  38.   GPIO_Init(RF_IRQ_GPIO_PORT,&GPIO_InitStruct);                        
  39.         
  40. //        /* Connect EXTI0 Line to PA0 pin */
  41. //  SYSCFG_EXTILineConfig(RF_EXIT_PORT,RF_EXIT_SOURCE);
  42. //        
  43. //        /* Configure EXTI0 line */
  44. //  EXTI_InitStruct.EXTI_Line=EXTI_Line0;  
  45. //  EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;
  46. //  EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Rising_Falling;
  47. //  EXTI_InitStruct.EXTI_LineCmd=ENABLE;
  48. //  EXTI_Init(&EXTI_InitStruct);
  49. //        
  50. //         /* Enable and set EXTI0_1 Interrupt */
  51. //  NVIC_InitStruct.NVIC_IRQChannel=EXTI0_1_IRQn;
  52. //  NVIC_InitStruct.NVIC_IRQChannelPriority=0;
  53. //  NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
  54. //  NVIC_Init(&NVIC_InitStruct);        
  55. //        
  56. }

  57. /*
  58. *         解码
  59. */

  60. bool bRF_HEAD_OK=0;
  61. bool bRF_RecOk=0;
  62. bool bLevelFlag=0;

  63. uint8_t u8HighCnt=0;
  64. uint8_t u8LowCnt=0;
  65. uint8_t u8bitCnt=0;

  66. #define HEAD_HIGH_MAX  7
  67. #define HEAD_HIGH_MIN  2
  68. #define HEAD_LOW_MAX  130
  69. #define HEAD_LOW_MIN  100        

  70. #define LOW_MAX 7
  71. #define LOW_MIN 2

  72. #define HIGH_MAX  13
  73. #define HIGH_MIN  8        
  74.         
  75. #define Compare 23
  76. uint32_t u32Code=0;
  77. uint32_t u32CodeBuf=0;

  78. uint8_t u8RxBuf[4]={0};
  79. uint8_t u8RxBuf1[4]={0};

  80. bool bCheckFlag=0;

  81. #include "Sensor.h"

  82. void RF_Decode(void)
  83. {        
  84.         
  85.         static uint8_t u8Tick=0;
  86.         
  87.         if(ReadRF_GPIO)                //高电平
  88.         {
  89.                 u8HighCnt+=1;
  90.                 bLevelFlag=1;                        
  91.         }
  92.         else                                                                //低电平电平
  93.         {
  94.                 u8LowCnt+=1;        
  95.                 u8Tick+=1;
  96.                 if(bLevelFlag)                //检测到同步码
  97.                 {                        
  98.                         if(((u8HighCnt>=HEAD_HIGH_MIN)&&(u8HighCnt<=HEAD_HIGH_MAX))&&\
  99.                                  ((u8LowCnt>=HEAD_LOW_MIN)&&(u8LowCnt<=HEAD_LOW_MAX)))
  100.                         {
  101.                                 bRF_HEAD_OK=1;
  102.                                 u8bitCnt=0;
  103.                                 u8Tick=0;
  104.                         }
  105.                         else if((bRF_HEAD_OK)&&((u8HighCnt>=HIGH_MIN)&&(u8HighCnt<=HIGH_MAX)))                //1
  106.                         {
  107.                                 u32Code<<=1;
  108.                                 u32Code|=0x00000001;                        // 1                                
  109.                                 u8bitCnt+=1;
  110.                                 if(u8bitCnt>=Compare)
  111.                                 {                                       
  112.                                         bRF_HEAD_OK=0;
  113.                                         u32CodeBuf=u32Code;        
  114.                                         bCheckFlag=1-bCheckFlag;
  115.                                         if(bCheckFlag)
  116.                                         {
  117.                                                 u8RxBuf[0]=u32Code>>12;
  118.                                                 u8RxBuf[1]=u32Code>>4;
  119.                                                 u8RxBuf[2]=u32Code&0x0f;
  120.                                         }
  121.                                         else if(u8Tick<=50)
  122.                                         {
  123.                                                 u8RxBuf1[0]=u32Code>>12;
  124.                                                 u8RxBuf1[1]=u32Code>>4;
  125.                                                 u8RxBuf1[2]=u32Code&0x0f;
  126.                                         }
  127.                                         else
  128.                                         {
  129.                                                 u8Tick=0;
  130.                                                 u8RxBuf[0]=0;
  131.                                                 u8RxBuf[1]=0;
  132.                                                 u8RxBuf[2]=0;
  133.                                                 u8RxBuf1[0]=0;
  134.                                                 u8RxBuf1[1]=0;
  135.                                                 u8RxBuf1[2]=0;
  136.                                         }
  137.                                         if((u8RxBuf[0]==u8RxBuf1[0])&&(u8RxBuf[1]==u8RxBuf1[1])&&(u8RxBuf[2]==u8RxBuf1[2]))
  138.                                         {
  139.                                                 bRF_RecOk=1;
  140.                                         }
  141.                                         u32Code=0;
  142.                                 }
  143.                         }
  144.                         else if((bRF_HEAD_OK)&&((u8HighCnt>=LOW_MIN)&&(u8HighCnt<=LOW_MAX)))                //0
  145.                         {
  146.                                 u32Code<<=1;
  147.                                 u32Code&=0xfffffffe;                // 0
  148.                                 u8bitCnt+=1;
  149.                                 if(u8bitCnt>=Compare)
  150.                                 {
  151.                                         bRF_HEAD_OK=0;                                       
  152.                                         u32CodeBuf=u32Code;                                       
  153.                                         bCheckFlag=1-bCheckFlag;
  154.                                         if(bCheckFlag)
  155.                                         {                                                
  156.                                                 u8RxBuf[0]=u32Code>>12;
  157.                                                 u8RxBuf[1]=u32Code>>4;
  158.                                                 u8RxBuf[2]=u32Code&0x0f;
  159.                                         }
  160.                                         else if(u8Tick<=50)
  161.                                         {                                                
  162.                                                 u8RxBuf1[0]=u32Code>>12;
  163.                                                 u8RxBuf1[1]=u32Code>>4;
  164.                                                 u8RxBuf1[2]=u32Code&0x0f;
  165.                                                 u8Tick=0;
  166.                                         }
  167.                                         else
  168.                                         {
  169.                                                 u8Tick=0;
  170.                                                 u8RxBuf[0]=0;
  171.                                                 u8RxBuf[1]=0;
  172.                                                 u8RxBuf[2]=0;
  173.                                                 u8RxBuf1[0]=0;
  174.                                                 u8RxBuf1[1]=0;
  175.                                                 u8RxBuf1[2]=0;
  176.                                         }
  177.                                         if((u8RxBuf[0]==u8RxBuf1[0])&&(u8RxBuf[1]==u8RxBuf1[1])&&(u8RxBuf[2]==u8RxBuf1[2]))
  178.                                         {
  179.                                                 bRF_RecOk=1;                                       
  180.                                         }
  181.                                         u32Code=0;
  182.                                 }
  183.                         }
  184.                         else
  185.                         {                                
  186.                                 u8bitCnt=0;
  187.                                 u8LowCnt=1;
  188.                                 u8HighCnt=0;        
  189.                         }
  190.                         u8LowCnt=1;
  191.                         u8HighCnt=0;
  192.                         u8Tick=0;
  193.                 }
  194.                 bLevelFlag=0;
  195.         }        
  196.         
  197.         if(bRF_RecOk)
  198.         {
  199.                 bRF_RecOk=0;
  200.                 if(u8RxBuf[2]==0x01)
  201.                 {
  202.                         bRunLock=1;
  203.                         bUP=1;
  204.                         bDN=0;
  205.                 }
  206.                 else if(u8RxBuf[2]==0x02)
  207.                 {
  208.                         bRunLock=1;
  209.                         bDN=1;
  210.                         bUP=0;
  211.                 }
  212.                 else if(u8RxBuf[2]==0x04)
  213.                 {
  214.                         bRunLock=0;
  215.                         bUP=0;
  216.                         bDN=0;
  217.                 }                                                
  218.                 u8RxBuf[0]=0;
  219.                 u8RxBuf[1]=0;
  220.                 u8RxBuf[2]=0;
  221.                 u8RxBuf1[0]=0;
  222.                 u8RxBuf1[1]=0;
  223.                 u8RxBuf1[2]=0;
  224.         }
  225.         

  226. }
复制代码

  1. /**
  2.   ******************************************************************************
  3.   * @file    HS1527.h
  4.   * @author  Gang
  5.   * @version V1.0.0
  6.   * @date    2021-7-5
  7.   * @brief   
  8.   ******************************************************************************
  9.   * @History
  10.         *                                       
  11.         * Pin Information:
  12.         *                                                                        RF_Data_Sr         PA0        
  13.   *
  14.   ******************************************************************************
  15.   */       
  16.        
  17. #ifndef _HS1527_H_
  18. #define _HS1527_H_
  19. /* Includes ------------------------------------------------------------------*/

  20. #include "stm32f0xx.h"

  21. //Code代码移植区
  22. #define RF_IRQ_PIN                                                                                        GPIO_Pin_0
  23. #define RF_IRQ_GPIO_PORT                                                                GPIOA
  24. #define RF_IRQ_GPIO_CLK                       RCC_AHBPeriph_GPIOA

  25. #define RF_EXIT_SOURCE                                                                        EXTI_PinSource0
  26. #define RF_EXIT_PORT                                                                                EXTI_PortSourceGPIOA       

  27. #define ReadRF_GPIO                (RF_IRQ_GPIO_PORT->IDR&RF_IRQ_PIN)

  28. void RF_GPIO_Config(void);
  29. void RF_Decode(void);

  30. #endif

复制代码



以上2个代码文件

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:672792 发表于 2021-7-23 21:18 | 只看该作者
如果想做一个优秀的程序员,注释是非常必要的
回复

使用道具 举报

板凳
ID:959849 发表于 2021-8-23 17:56 | 只看该作者
沒看到Task.h
回复

使用道具 举报

地板
ID:697695 发表于 2021-10-27 10:30 | 只看该作者
代码要是能有注释,会有利于更好理解
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表