MM32射频解码(产品检验,可靠稳定)

MM32射频解码

  本人曾负责开发风扇灯产品,故将射频解码的算法和程序进行总结,以便日后学习完善,也与大家分享。射频模块与MM32的通信协议为类似于EV1527的协议,每帧发送32位数据,前20位为地址码,接着4位为相应的操作码,最后一个字节的高4位为动作码,协议最后1位为同步位,为0。下图为1527协议的编码方式。在这里插入图片描述
  下表为定义的产品遥控码格式。产品具备冷暖灯及调光功能,风扇的正反转,以及APP的Wifi控制。
在这里插入图片描述
  射频解码程序如下,经过检验,稳定可靠,完成产品级别的交付。

// MM32射频解码
uint8_t RF;
uint8_t HW,LW;           				  			//高低电平宽度
uint8_t Code_x;                				    	//接受到第几位编码
uint8_t FRemote1,FRemote2,FRemote3,FRemote4; 		//第一次接收到遥控编码,这四个依次从高到低存放遥控码的32位
uint8_t Encode1,Encode2,Encode3,Encode4;			//解码寄存器
uint8_t SRemote1,SRemote2,SRemote3,SRemote4; 		//第二次接收到遥控编码
uint8_t rf_ok1,rf_ok2,rf_ok;        			    //解码过程中的临时接收成功标志,接收到一个完整的遥控命令后置1,通知解码程序可以解码了
uint8_t old_level;            						//保存上一次查询到的电平状态
uint8_t Syn;              							//接收到同步码时置1
uint8_t Decode_ok;              					//判断按键结束,规定时间内未接收到同步码时置1
uint16_t s;											//二次接收的规定时间
uint16_t time;																	
uint8_t rf_data[4];  								//接受码存放
uint8_t Code_check=1;								//对码标志
uint8_t num_y=0;									//长按YELLOW计数
uint8_t num_w=0;									//长按WHITE计数
uint8_t num_o=0;									//长按OFF计数

void TIM2_IRQHandler(void)
{
   
	
    if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
    {
   
			
        TIM_ClearITPendingBit(TIM2, TIM_IT_Update); 

        RF = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5); 
        if (!RF) 
        {
    
            LW++;   
                      
            old_level=0; 
        }               
         else         
         {
    
            HW++;
            if (!old_level)  		//检测电平从低到高的跳变,已检测到一个(高-低)完整电平周期
                           
            {
      
                if (((HW>=3)&&(HW<=5))&&((LW>=120)&&(LW<=130))) 	//同步码
                {
    
										
                    Syn = 1 ;
					time=640;
					Decode_ok=0;
                    Code_x = 0;
                    FRemote1=0; FRemote2=0; FRemote3=0; FRemote4=0;    
                }
                else if((Syn)&&((LW>=10)&&(LW<=14)))				//判0
                {
      
                    Code_x++; 
                    if(Code_x>31)
                    {
   
                        if
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值