433遥控器解码

最简单粗暴的做法,利用滴答时钟,10us一次

复制代码
void SysTick_IRQHandler(void)
{
	
	Rf_level=Gpio_GetInputIO(Dec_RF_PORT, Dec_RF_PIN);

	switch(Rf_step)
	{
		case 0:
			if(Rf_level==0)
			{
				Rf_step=1;
				Rf_sync_low_cnt=0;
			}
			break;
		case 1://read sync low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				Rf_step=2;
			}
			break;
		case 2://read sync high level
			Rf_sync_high_cnt++;
			if(Rf_sync_low_cnt>700)
			{
				Rf_step=5;
				Rf_sync_low_cnt=0;
			}
			else
			{
				Rf_step=0;
				Rf_sync_low_cnt=0;
			}
			break;
		case 5://read byte1 high level
			if(Rf_level==0)
			{
				Rf_step=6;
			}
			else
			{
				Rf_sync_high_cnt++;
			}			
			break;
		case 6://read byte1 low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				Rf_step=7;
				if(Rf_sync_high_cnt>Rf_sync_low_cnt)
				{
					Rf_Value_Byte1=1;
				}
				else
				{
					Rf_Value_Byte1=0;
				}
				Rf_sync_low_cnt=0;
				Rf_sync_high_cnt=0;
			}			
			break;
		case 7://read byte2 high level
			if(Rf_level==0)
			{
				Rf_step=8;
			}
			else
			{
				Rf_sync_high_cnt++;
			}			
			break;
		case 8://read byte2 low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				Rf_step=9;
				if(Rf_sync_high_cnt>Rf_sync_low_cnt)
				{
					Rf_Value_Byte2=1;
				}
				else
				{
					Rf_Value_Byte2=0;
				}
				Rf_sync_low_cnt=0;
				Rf_sync_high_cnt=0;
			}			
			break;
		case 9://read byte3 high level
			if(Rf_level==0)
			{
				Rf_step=10;
			}
			else
			{
				Rf_sync_high_cnt++;
			}			
			break;
		case 10://read byte3 low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				Rf_step=11;
				if(Rf_sync_high_cnt>Rf_sync_low_cnt)
				{
					Rf_Value_Byte3=1;
				}
				else
				{
					Rf_Value_Byte3=0;
				}
				Rf_sync_low_cnt=0;
				Rf_sync_high_cnt=0;
			}			
			break;
		case 11://read byte4 high level
			if(Rf_level==0)
			{
				Rf_step=12;
			}
			else
			{
				Rf_sync_high_cnt++;
			}			
			break;
		case 12://read byte4 low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				Rf_step=13;
				if(Rf_sync_high_cnt>Rf_sync_low_cnt)
				{
					Rf_Value_Byte4=1;
				}
				else
				{
					Rf_Value_Byte4=0;
				}
				Rf_sync_low_cnt=0;
				Rf_sync_high_cnt=0;
			}			
			break;
		case 13://read byte5 high level
			if(Rf_level==0)
			{
				Rf_step=14;
			}
			else
			{
				Rf_sync_high_cnt++;
			}			
			break;
		case 14://read byte5 low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				Rf_step=15;
				if(Rf_sync_high_cnt>Rf_sync_low_cnt)
				{
					Rf_Value_Byte5=1;
				}
				else
				{
					Rf_Value_Byte5=0;
				}
				Rf_sync_low_cnt=0;
				Rf_sync_high_cnt=0;
			}			
			break;
		case 15://read byte6 high level
			if(Rf_level==0)
			{
				Rf_step=16;
			}
			else
			{
				Rf_sync_high_cnt++;
			}			
			break;
		case 16://read byte6 low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				Rf_step=17;
				if(Rf_sync_high_cnt>Rf_sync_low_cnt)
				{
					Rf_Value_Byte6=1;
				}
				else
				{
					Rf_Value_Byte6=0;
				}
				Rf_sync_low_cnt=0;
				Rf_sync_high_cnt=0;
			}			
			break;
		case 17://read byte7 high level
			if(Rf_level==0)
			{
				Rf_step=18;
			}
			else
			{
				Rf_sync_high_cnt++;
			}			
			break;
		case 18://read byte7 low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				Rf_step=19;
				if(Rf_sync_high_cnt>Rf_sync_low_cnt)
				{
					Rf_Value_Byte7=1;
				}
				else
				{
					Rf_Value_Byte7=0;
				}
				Rf_sync_low_cnt=0;
				Rf_sync_high_cnt=0;
			}			
			break;
		case 19://read byte8 high level
			if(Rf_level==0)
			{
				Rf_step=20;
			}
			else
			{
				Rf_sync_high_cnt++;
			}			
			break;
		case 20://read byte8 low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				Rf_step=21;
				if(Rf_sync_high_cnt>Rf_sync_low_cnt)
				{
					Rf_Value_Byte8=1;
				}
				else
				{
					Rf_Value_Byte8=0;
				}
				Rf_sync_low_cnt=0;
				Rf_sync_high_cnt=0;
			}			
			break;
		case 21://read byte9 high level
			if(Rf_level==0)
			{
				Rf_step=22;
			}
			else
			{
				Rf_sync_high_cnt++;
			}			
			break;
		case 22://read byte9 low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				Rf_step=23;
				if(Rf_sync_high_cnt>Rf_sync_low_cnt)
				{
					Rf_Value_Byte9=1;
				}
				else
				{
					Rf_Value_Byte9=0;
				}
				Rf_sync_low_cnt=0;
				Rf_sync_high_cnt=0;
			}			
			break;
		case 23://read byte10 high level
			if(Rf_level==0)
			{
				Rf_step=24;
			}
			else
			{
				Rf_sync_high_cnt++;
			}			
			break;
		case 24://read byte10 low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				Rf_step=25;
				if(Rf_sync_high_cnt>Rf_sync_low_cnt)
				{
					Rf_Value_Byte10=1;
				}
				else
				{
					Rf_Value_Byte10=0;
				}
				Rf_sync_low_cnt=0;
				Rf_sync_high_cnt=0;
			}			
			break;	
		case 25://read byte11 high level
			if(Rf_level==0)
			{
				Rf_step=26;
			}
			else
			{
				Rf_sync_high_cnt++;
			}			
			break;
		case 26://read byte11 low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				Rf_step=27;
				if(Rf_sync_high_cnt>Rf_sync_low_cnt)
				{
					Rf_Value_Byte11=1;
				}
				else
				{
					Rf_Value_Byte11=0;
				}
				Rf_sync_low_cnt=0;
				Rf_sync_high_cnt=0;
			}			
			break;	
		case 27://read byte12 high level
			if(Rf_level==0)
			{
				Rf_step=28;
			}
			else
			{
				Rf_sync_high_cnt++;
			}			
			break;
		case 28://read byte12 low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				Rf_step=29;
				if(Rf_sync_high_cnt>Rf_sync_low_cnt)
				{
					Rf_Value_Byte12=1;
				}
				else
				{
					Rf_Value_Byte12=0;
				}
				Rf_sync_low_cnt=0;
				Rf_sync_high_cnt=0;
			}			
			break;	
		case 29://read byte13 high level
			if(Rf_level==0)
			{
				Rf_step=30;
			}
			else
			{
				Rf_sync_high_cnt++;
			}			
			break;
		case 30://read byte13 low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				Rf_step=31;
				if(Rf_sync_high_cnt>Rf_sync_low_cnt)
				{
					Rf_Value_Byte13=1;
				}
				else
				{
					Rf_Value_Byte13=0;
				}
				Rf_sync_low_cnt=0;
				Rf_sync_high_cnt=0;
			}			
			break;	
		case 31://read byte14 high level
			if(Rf_level==0)
			{
				Rf_step=32;
			}
			else
			{
				Rf_sync_high_cnt++;
			}			
			break;
		case 32://read byte14 low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				Rf_step=33;
				if(Rf_sync_high_cnt>Rf_sync_low_cnt)
				{
					Rf_Value_Byte14=1;
				}
				else
				{
					Rf_Value_Byte14=0;
				}
				Rf_sync_low_cnt=0;
				Rf_sync_high_cnt=0;
			}			
			break;	
		case 33://read byte15 high level
			if(Rf_level==0)
			{
				Rf_step=34;
			}
			else
			{
				Rf_sync_high_cnt++;
			}			
			break;
		case 34://read byte15 low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				Rf_step=35;
				if(Rf_sync_high_cnt>Rf_sync_low_cnt)
				{
					Rf_Value_Byte15=1;
				}
				else
				{
					Rf_Value_Byte15=0;
				}
				Rf_sync_low_cnt=0;
				Rf_sync_high_cnt=0;
			}			
			break;	
		case 35://read byte16 high level
			if(Rf_level==0)
			{
				Rf_step=36;
			}
			else
			{
				Rf_sync_high_cnt++;
			}			
			break;
		case 36://read byte16 low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				Rf_step=37;
				if(Rf_sync_high_cnt>Rf_sync_low_cnt)
				{
					Rf_Value_Byte16=1;
				}
				else
				{
					Rf_Value_Byte16=0;
				}
				Rf_sync_low_cnt=0;
				Rf_sync_high_cnt=0;
			}			
			break;	
		case 37://read byte17 high level
			if(Rf_level==0)
			{
				Rf_step=38;
			}
			else
			{
				Rf_sync_high_cnt++;
			}			
			break;
		case 38://read byte17 low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				Rf_step=39;
				if(Rf_sync_high_cnt>Rf_sync_low_cnt)
				{
					Rf_Value_Byte17=1;
				}
				else
				{
					Rf_Value_Byte17=0;
				}
				Rf_sync_low_cnt=0;
				Rf_sync_high_cnt=0;
			}			
			break;
		case 39://read byte18 high level
			if(Rf_level==0)
			{
				Rf_step=40;
			}
			else
			{
				Rf_sync_high_cnt++;
			}			
			break;
		case 40://read byte18 low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				Rf_step=41;
				if(Rf_sync_high_cnt>Rf_sync_low_cnt)
				{
					Rf_Value_Byte18=1;
				}
				else
				{
					Rf_Value_Byte18=0;
				}
				Rf_sync_low_cnt=0;
				Rf_sync_high_cnt=0;
			}			
			break;	
		case 41://read byte19 high level
			if(Rf_level==0)
			{
				Rf_step=42;
			}
			else
			{
				Rf_sync_high_cnt++;
			}			
			break;
		case 42://read byte19 low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				Rf_step=43;
				if(Rf_sync_high_cnt>Rf_sync_low_cnt)
				{
					Rf_Value_Byte19=1;
				}
				else
				{
					Rf_Value_Byte19=0;
				}
				Rf_sync_low_cnt=0;
				Rf_sync_high_cnt=0;
			}			
			break;	
		case 43://read byte20 high level
			if(Rf_level==0)
			{
				Rf_step=44;
			}
			else
			{
				Rf_sync_high_cnt++;
			}			
			break;
		case 44://read byte20 low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				Rf_step=45;
				if(Rf_sync_high_cnt>Rf_sync_low_cnt)
				{
					Rf_Value_Byte20=1;
				}
				else
				{
					Rf_Value_Byte20=0;
				}
				Rf_sync_low_cnt=0;
				Rf_sync_high_cnt=0;
			}			
			break;	
		case 45://read byte21 high level
			if(Rf_level==0)
			{
				Rf_step=46;
			}
			else
			{
				Rf_sync_high_cnt++;
			}			
			break;
		case 46://read byte21 low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				Rf_step=47;
				if(Rf_sync_high_cnt>Rf_sync_low_cnt)
				{
					Rf_Value_Byte21=1;
				}
				else
				{
					Rf_Value_Byte21=0;
				}
				Rf_sync_low_cnt=0;
				Rf_sync_high_cnt=0;
			}			
			break;	
		case 47://read byte22 high level
			if(Rf_level==0)
			{
				Rf_step=48;
			}
			else
			{
				Rf_sync_high_cnt++;
			}			
			break;
		case 48://read byte22 low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				Rf_step=49;
				if(Rf_sync_high_cnt>Rf_sync_low_cnt)
				{
					Rf_Value_Byte22=1;
				}
				else
				{
					Rf_Value_Byte22=0;
				}
				Rf_sync_low_cnt=0;
				Rf_sync_high_cnt=0;
			}			
			break;	
		case 49://read byte23 high level
			if(Rf_level==0)
			{
				Rf_step=50;
			}
			else
			{
				Rf_sync_high_cnt++;
			}			
			break;
		case 50://read byte23 low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				Rf_step=51;
				if(Rf_sync_high_cnt>Rf_sync_low_cnt)
				{
					Rf_Value_Byte23=1;
				}
				else
				{
					Rf_Value_Byte23=0;
				}
				Rf_sync_low_cnt=0;
				Rf_sync_high_cnt=0;
			}			
			break;	
		case 51://read byte24 high level
			if(Rf_level==0)
			{
				Rf_step=52;
			}
			else
			{
				Rf_sync_high_cnt++;
			}			
			break;
		case 52://read byte24 low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				Rf_step=53;
				if(Rf_sync_high_cnt>Rf_sync_low_cnt)
				{
					Rf_Value_Byte24=1;
				}
				else
				{
					Rf_Value_Byte24=0;
				}
				Rf_sync_low_cnt=0;
				Rf_sync_high_cnt=0;
			}			
			break;
		case 53://read byte25 high level
			if(Rf_level==0)
			{
				Rf_step=54;
			}
			else
			{
				Rf_sync_high_cnt++;
			}			
			break;
		case 54://read byte25 low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				Rf_step=55;
				if(Rf_sync_high_cnt>Rf_sync_low_cnt)
				{
					Rf_Value_Byte25=1;
				}
				else
				{
					Rf_Value_Byte25=0;
				}
				Rf_sync_low_cnt=0;
				Rf_sync_high_cnt=0;
			}			
			break;
		case 55://read byte26 high level
			if(Rf_level==0)
			{
				Rf_step=56;
			}
			else
			{
				Rf_sync_high_cnt++;
			}			
			break;
		case 56://read byte26 low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				Rf_step=57;
				if(Rf_sync_high_cnt>Rf_sync_low_cnt)
				{
					Rf_Value_Byte26=1;
				}
				else
				{
					Rf_Value_Byte26=0;
				}
				Rf_sync_low_cnt=0;
				Rf_sync_high_cnt=0;
			}			
			break;	
		case 57://read byte27 high level
			if(Rf_level==0)
			{
				Rf_step=58;
			}
			else
			{
				Rf_sync_high_cnt++;
			}			
			break;
		case 58://read byte27 low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				Rf_step=59;
				if(Rf_sync_high_cnt>Rf_sync_low_cnt)
				{
					Rf_Value_Byte27=1;
				}
				else
				{
					Rf_Value_Byte27=0;
				}
				Rf_sync_low_cnt=0;
				Rf_sync_high_cnt=0;
			}			
			break;	
		case 59://read byte28 high level
			if(Rf_level==0)
			{
				Rf_step=60;
			}
			else
			{
				Rf_sync_high_cnt++;
			}			
			break;
		case 60://read byte28 low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				Rf_step=61;
				if(Rf_sync_high_cnt>Rf_sync_low_cnt)
				{
					Rf_Value_Byte28=1;
				}
				else
				{
					Rf_Value_Byte28=0;
				}
				Rf_sync_low_cnt=0;
				Rf_sync_high_cnt=0;
			}			
			break;	
		case 61://read byte29 high level
			if(Rf_level==0)
			{
				Rf_step=62;
			}
			else
			{
				Rf_sync_high_cnt++;
			}			
			break;
		case 62://read byte29 low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				Rf_step=63;
				if(Rf_sync_high_cnt>Rf_sync_low_cnt)
				{
					Rf_Value_Byte29=1;
				}
				else
				{
					Rf_Value_Byte29=0;
				}
				Rf_sync_low_cnt=0;
				Rf_sync_high_cnt=0;
			}			
			break;	
		case 63://read byte30 high level
			if(Rf_level==0)
			{
				Rf_step=64;
			}
			else
			{
				Rf_sync_high_cnt++;
			}			
			break;
		case 64://read byte30 low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				Rf_step=65;
				if(Rf_sync_high_cnt>Rf_sync_low_cnt)
				{
					Rf_Value_Byte30=1;
				}
				else
				{
					Rf_Value_Byte30=0;
				}
				Rf_sync_low_cnt=0;
				Rf_sync_high_cnt=0;
			}			
			break;	
		case 65://read byte31 high level
			if(Rf_level==0)
			{
				Rf_step=66;
			}
			else
			{
				Rf_sync_high_cnt++;
			}			
			break;
		case 66://read byte31 low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				Rf_step=67;
				if(Rf_sync_high_cnt>Rf_sync_low_cnt)
				{
					Rf_Value_Byte31=1;
				}
				else
				{
					Rf_Value_Byte31=0;
				}
				Rf_sync_low_cnt=0;
				Rf_sync_high_cnt=0;
			}			
			break;	
		case 67://read byte32 high level
			if(Rf_level==0)
			{
				Rf_step=68;
			}
			else
			{
				Rf_sync_high_cnt++;
			}			
			break;
		case 68://read byte32 low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				Rf_step=69;
				if(Rf_sync_high_cnt>Rf_sync_low_cnt)
				{
					Rf_Value_Byte32=1;
				}
				else
				{
					Rf_Value_Byte32=0;
				}
				Rf_sync_low_cnt=0;
				Rf_sync_high_cnt=0;
			}			
			break;	
		case 69://read byte32 low level
			Rf_Value=(Rf_Value_Byte1<<31)|(Rf_Value_Byte2<<30)|(Rf_Value_Byte3<<29)|(Rf_Value_Byte4<<28)|(Rf_Value_Byte5<<27)|(Rf_Value_Byte6<<26)|(Rf_Value_Byte7<<25)|(Rf_Value_Byte8<<24)|
							 (Rf_Value_Byte9<<23)|(Rf_Value_Byte10<<22)|(Rf_Value_Byte11<<21)|(Rf_Value_Byte12<<20)|(Rf_Value_Byte13<<19)|(Rf_Value_Byte14<<18)|(Rf_Value_Byte15<<17)|(Rf_Value_Byte16<<16)|
							 (Rf_Value_Byte17<<15)|(Rf_Value_Byte18<<14)|(Rf_Value_Byte19<<13)|(Rf_Value_Byte20<<12)|(Rf_Value_Byte21<<11)|(Rf_Value_Byte22<<10)|(Rf_Value_Byte23<<9)|(Rf_Value_Byte24<<8)|
							 (Rf_Value_Byte25<<7)|(Rf_Value_Byte26<<6)|(Rf_Value_Byte27<<5)|(Rf_Value_Byte28<<4)|(Rf_Value_Byte29<<3)|(Rf_Value_Byte30<<2)|(Rf_Value_Byte31<<1)|(Rf_Value_Byte32<<0);
		Rf_step=70;	
		break;
		case 70://
			if(Rf_Value==0x4E91D874 || Rf_Value==0x4E91D878 || Rf_Value==0x4E91D872)
			{
			}
			else
			{
				Rf_step=0;
			}
		break;		
		default:
			break;
	}
}

实测解码成功!

这样的代码肯定要优化

将后面部分:

复制代码
case 68://read byte32 low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				Rf_step=69;
				if((Rf_sync_high_cnt>2*Rf_sync_low_cnt) && (Rf_sync_low_cnt>RF_BIT_LOW_LEVEL_MIN) && (Rf_sync_low_cnt<RF_BIT_LOW_LEVEL_MAX) && (Rf_sync_high_cnt>RF_BIT_HIGH_LEVEL_MIN) && (Rf_sync_high_cnt<RF_BIT_HIGH_LEVEL_MAX))
				{
					Rf_Value_Byte32=1;
				}
				else
				{
					Rf_Value_Byte32=0;
				}
				Rf_sync_low_cnt=0;
				Rf_sync_high_cnt=0;
			}			
			break;	
		case 69://read byte32 low level
			Rf_Value=(Rf_Value_Byte1<<31)|(Rf_Value_Byte2<<30)|(Rf_Value_Byte3<<29)|(Rf_Value_Byte4<<28)|(Rf_Value_Byte5<<27)|(Rf_Value_Byte6<<26)|(Rf_Value_Byte7<<25)|(Rf_Value_Byte8<<24)|
							 (Rf_Value_Byte9<<23)|(Rf_Value_Byte10<<22)|(Rf_Value_Byte11<<21)|(Rf_Value_Byte12<<20)|(Rf_Value_Byte13<<19)|(Rf_Value_Byte14<<18)|(Rf_Value_Byte15<<17)|(Rf_Value_Byte16<<16)|
							 (Rf_Value_Byte17<<15)|(Rf_Value_Byte18<<14)|(Rf_Value_Byte19<<13)|(Rf_Value_Byte20<<12)|(Rf_Value_Byte21<<11)|(Rf_Value_Byte22<<10)|(Rf_Value_Byte23<<9)|(Rf_Value_Byte24<<8)|
							 (Rf_Value_Byte25<<7)|(Rf_Value_Byte26<<6)|(Rf_Value_Byte27<<5)|(Rf_Value_Byte28<<4)|(Rf_Value_Byte29<<3)|(Rf_Value_Byte30<<2)|(Rf_Value_Byte31<<1)|(Rf_Value_Byte32<<0);
			if(Rf_Value==0x4E91D874 || Rf_Value==0x4E91D878 || Rf_Value==0x4E91D872)
			{
			}
			else
			{
				Rf_step=0;
			}
		
		Rf_step=70;	
		break;
		case 70://
			if(Rf_Value==0x4E91D874 || Rf_Value==0x4E91D878 || Rf_Value==0x4E91D872)
			{
			}
			else
			{
				Rf_step=0;
			}
		break;		
		default:
			break;

修改为:

复制代码
		case 68://read byte32 low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				Rf_step=69;
				if((Rf_sync_high_cnt>2*Rf_sync_low_cnt) && (Rf_sync_low_cnt>RF_BIT_LOW_LEVEL_MIN) && (Rf_sync_low_cnt<RF_BIT_LOW_LEVEL_MAX) && (Rf_sync_high_cnt>RF_BIT_HIGH_LEVEL_MIN) && (Rf_sync_high_cnt<RF_BIT_HIGH_LEVEL_MAX))
				{
					Rf_Value_Byte32=1;
				}
				else
				{
					Rf_Value_Byte32=0;
				}
				Rf_sync_low_cnt=0;
				Rf_sync_high_cnt=0;
			}			
			break;	
		case 69://read byte32 low level
			Rf_Value=(Rf_Value_Byte1<<31)|(Rf_Value_Byte2<<30)|(Rf_Value_Byte3<<29)|(Rf_Value_Byte4<<28)|(Rf_Value_Byte5<<27)|(Rf_Value_Byte6<<26)|(Rf_Value_Byte7<<25)|(Rf_Value_Byte8<<24)|
							 (Rf_Value_Byte9<<23)|(Rf_Value_Byte10<<22)|(Rf_Value_Byte11<<21)|(Rf_Value_Byte12<<20)|(Rf_Value_Byte13<<19)|(Rf_Value_Byte14<<18)|(Rf_Value_Byte15<<17)|(Rf_Value_Byte16<<16)|
							 (Rf_Value_Byte17<<15)|(Rf_Value_Byte18<<14)|(Rf_Value_Byte19<<13)|(Rf_Value_Byte20<<12)|(Rf_Value_Byte21<<11)|(Rf_Value_Byte22<<10)|(Rf_Value_Byte23<<9)|(Rf_Value_Byte24<<8)|
							 (Rf_Value_Byte25<<7)|(Rf_Value_Byte26<<6)|(Rf_Value_Byte27<<5)|(Rf_Value_Byte28<<4)|(Rf_Value_Byte29<<3)|(Rf_Value_Byte30<<2)|(Rf_Value_Byte31<<1)|(Rf_Value_Byte32<<0);
			if(Rf_Value==0x4E91D874 || Rf_Value==0x4E91D878 || Rf_Value==0x4E91D872)
			{
			}
			else
			{
				Rf_step=0;
			}
		
//		Rf_step=70;	
		break;
//		case 70://
//			if(Rf_Value==0x4E91D874 || Rf_Value==0x4E91D878 || Rf_Value==0x4E91D872)
//			{
//			}
//			else
//			{
//				Rf_step=0;
//			}
//		break;		
		default:
			break;

后,解码成功后一直运行在case 69:这里,不进主循环了。

MCU是HC32F030J8TA,48MHZ,状态机一直在69,计算量大,导致不能进入主循环。

继续优化:

复制代码
void SysTick_IRQHandler(void)
{
	Rf_level=Gpio_GetInputIO(Dec_RF_PORT, Dec_RF_PIN);

	switch(Rf_step)
	{
		case 0:
			if(Rf_level==0){ Rf_step=1; Rf_sync_low_cnt=0;}
			break;
		case 1://read sync low level
			if(Rf_level==0){	Rf_sync_low_cnt++;}
			else{	Rf_step=2;}
			break;
		case 2://read sync high level
			Rf_sync_high_cnt++;
			if((Rf_sync_low_cnt>RF_SYNC_LOW_LEVEL_MIN) && (Rf_sync_low_cnt<RF_SYNC_LOW_LEVEL_MAX))
			{
				Rf_step=3;	Rf_sync_low_cnt=0;
			}
			else
			{
				Rf_step=0;	Rf_sync_low_cnt=0;
			}
			break;
		case 3://read byte1 high level
			if(Rf_level==0){ Rf_step=4;}
			else{	Rf_sync_high_cnt++;}			
			break;
		case 4://read byte1 low level
			if(Rf_level==0)
			{
				Rf_sync_low_cnt++;
			}
			else
			{
				if(Rf_Recv_num<31)
				{
					Rf_Recv_num++;
					Rf_step=3;
				}
				else
				{
					Rf_Recv_num=0;
					Rf_step=5;
				}
				if((Rf_sync_high_cnt>2*Rf_sync_low_cnt) && (Rf_sync_low_cnt>RF_BIT_LOW_LEVEL_MIN) && (Rf_sync_low_cnt<RF_BIT_LOW_LEVEL_MAX) && (Rf_sync_high_cnt>RF_BIT_HIGH_LEVEL_MIN) && (Rf_sync_high_cnt<RF_BIT_HIGH_LEVEL_MAX))
				{
					Rf_Value=Rf_Value<<1|1;
				}
				else
				{
					Rf_Value=Rf_Value<<1|0;
				}
				Rf_sync_low_cnt=0; Rf_sync_high_cnt=0;
			}			
			break;									
		case 5://read byte32 low level
			if(Rf_Value==0x4E91D874){ Machine_RF_UP_Flag=1;}
			if(Rf_Value==0x4E91D878){ Machine_RF_DOWN_Flag=1;}
			if(Rf_Value==0x4E91D872){ Machine_RF_STOP_Flag=1;}					
		Rf_step=0; Rf_Value=0;			
		break;		
		default:
			break;
	}
}

差不多了。

相关推荐
GeekArch2 小时前
第5讲:嵌入式场景二范式决策树:什么情况快写、什么情况严写
人工智能·stm32·单片机·mcu·物联网·决策树·机器学习
炸膛坦客15 小时前
单片机开发工具篇:(九)MCU 芯片包的安装
单片机·嵌入式硬件
电气_空空21 小时前
基于LabVIEW的数据采集系统设计与实现
单片机·嵌入式硬件·labview
caimouse21 小时前
ReactOS BootCD 光盘布局完整深度分析
单片机·reactos
zlinear数据采集卡1 天前
从万用表的6步调零到硅片级微秒自校准:硬核拆解LHAMP188的宽压轨到轨与零漂移实战
arm开发·stm32·单片机·嵌入式硬件·fpga开发
国科安芯1 天前
ASC8T245S 8通道电平转换设计实战:从系统架构到QFN24 Layout再到量产测试
网络·单片机·物联网·安全·fpga开发·系统架构
伟大的前程1 天前
us级开定时器中断,单片机的开销大,改用轮询的方式
单片机·嵌入式硬件
2501_914245932 天前
C语言与硬件交互:从GPIO到中断的嵌入式编程实践
c语言·单片机·交互
2401_854151552 天前
嵌入式 Bootloader 与 OTA 固件升级深度解析——从 Flash 分区到安全回滚
开发语言·stm32·单片机·嵌入式硬件·安全·php