⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 backup2.c

📁 LWIP在STM32裸机上的移植
💻 C
字号:
//backup2.c  

//======================= 11-28 ===========================//

		if(SlaveAddr != 0)
		{
			if(InputFlag == 1)
			{
				TxMessage.StdId = SlaveAddr;
				TxMessage.RTR = CAN_RTR_DATA;
				TxMessage.IDE = CAN_ID_STD;
				TxMessage.DLC = 1;
				TxMessage.Data[0] = 0xFA;
				CAN_Transmit(CAN2, &TxMessage);

				InputFlag = 0;
				SlaveAddr = 0;
			}

			if(Outputflag == 1)
			{
				TxMessage.StdId = SlaveAddr;
				TxMessage.RTR = CAN_RTR_DATA;
				TxMessage.IDE = CAN_ID_STD;
				TxMessage.DLC = 4;
				TxMessage.Data[0] = 0x0;
				TxMessage.Data[1] = 0x0;
				TxMessage.Data[2] = 0x0;
				TxMessage.Data[3] = 0x0;
				CAN_Transmit(CAN2, &TxMessage);

				InputFlag = 0;
				SlaveAddr = 0;
			}
		}

//================== 11-28 =====================//
			
			if(InputFlag == 1)
			{
				InputAddr[0] = RxMessage2.StdId & 0x7FF;
			}
			else if(InputFlag == 2)
			{
				InputAddr[1] = RxMessage2.StdId & 0x7FF;
			}
			else if(InputFlag == 3)
			{
				InputAddr[2] = RxMessage2.StdId & 0x7FF;
			}
			else
			{
				InputFlag = 3;
				InputAddr[2] = RxMessage2.StdId & 0x7FF;	//若存满,则刷新	
			}

//=================== 11-28 =====================//

		//推子响应(标识符低8位为2表示数据为增益值)
		if(MasterAddr2 != 0)
		{
//			TxMessage.StdId = MasterAddr2;
			TxMessage.RTR = CAN_RTR_DATA;
			TxMessage.IDE = CAN_ID_STD;
			TxMessage.DLC = 6;
			TxMessage.Data[5] = LR_Show[5];

			switch(MasterAddr2)
			{
				//ID: 0x102 - 0x502 表示5个模块增益返回值
				//(一个模块4路,每路分左右声道,用一个字节(8位)表示)
				case (0x102):
					for(i=0;i<8;i++)
					{
						if(RxData[i]>0xD8 && RxData[i]<0x18)	//范围:-40 ~ 40
							LR_Show[0] |= 1<<i;
						else if(RxData[i] == 0x80)			 	//值为:-128 表示模块没有接
							LR_Show[0] &= 0<<i;
						else
							continue;  							//否则,保持前一时刻的值
					}
					TxMessage.Data[0] = LR_Show[0];
					TxMessage.StdId = 0x102;
					if((can_flag2 == 1))
						CAN_Transmit(CAN2, &TxMessage);
					for(i=0;i<8;i++)
						RxData[i] = 0x0;
					if(MasterAddr2 == 0x102)
					{
						can_flag2 = 0;
						MasterAddr2 = 0;
					}
					break;

				case (0x202):
					break;

				default:
					break;			
			}
			
			if(tim_cnt%250 == 0)
				CAN_Transmit(CAN2, &TxMessage);
		}

//======================== 12-05 ==========================//

			if(tim_1) printf("KeySetData = 0x%X\n",KeySetData);

			if(tim_1) 
			{
				printf("KeySetDataBK = 0x%X\n",KeySetDataBK);
				tim_1 = 0;
			}

//为什么添加这段程序,运行一段时间便无法接受到推子模块的按键?? === 12-05 ===
		if(tim_3)
		{
			printf("\n===================\n");
			TxMessage.RTR = CAN_RTR_DATA;
			TxMessage.IDE = CAN_ID_STD;
			TxMessage.DLC = 4;
			for(i=0;i<4;i++)
				TxMessage.Data[i] = KeyDataBK[i];
			TxMessage.StdId = 0x101;
			CAN_Transmit(CAN1, &TxMessage);

			for(i=0;i<4;i++)
				TxMessage.Data[i] = KeyDataBK[i+4];
			TxMessage.StdId = 0x201;
			CAN_Transmit(CAN1, &TxMessage);

			for(i=0;i<4;i++)
				TxMessage.Data[i] = KeyDataBK[i+8];
			TxMessage.StdId = 0x301;
			CAN_Transmit(CAN1, &TxMessage);
			
			for(i=0;i<4;i++)
				TxMessage.Data[i] = KeyDataBK[i+12];
			TxMessage.StdId = 0x401;
			CAN_Transmit(CAN1, &TxMessage);

			for(i=0;i<4;i++)
				TxMessage.Data[i] = KeyDataBK[i+16];
			TxMessage.StdId = 0x501;
			CAN_Transmit(CAN1, &TxMessage);				

			tim_3 = 0;
		}
			
//			if(tim_cnt%250 == 0)			//(can_flag1 == 1) || 
//				CAN_Transmit(CAN1, &TxMessage);
			
//			can_flag1 = 0;
//			MasterAddr1 = 0;
//			for(i=0;i<20;i++)
//				KeyData[i] = 0x0;

			printf("\nTxData[0] = 0x%X\n",TxData[0]);
			printf("TxData[1] = 0x%X\n",TxData[1]);
//			printf("TxData[8] = 0x%X\n",TxData[8]);
//			printf("TxData[16] = 0x%X\n",TxData[16]);
//			printf("TxData[24] = 0x%X\n",TxData[24]);
			printf("TxData[32] = 0x%X\n",TxData[32]);
			printf("TxData[39] = 0x%X\n\n",TxData[39]);

			printf("RxData[0] = 0x%X\n",RxData[0]);
			printf("RxData[1] = 0x%X\n",RxData[1]);
			printf("RxData[39] = 0x%X\n\n",RxData[39]);


//==================== 12-06 ======================//

							printf("\n(1).KeySetData = 0x%X\n",KeySetData);
							printf("(1).KeySetDataBK = 0x%X\n",KeySetDataBK);

							printf("\n(2).KeySetData = 0x%X\n",KeySetData);
							printf("(2).KeySetDataBK = 0x%X\n",KeySetDataBK);


//==================== 12-07 ======================//

//对于总控模块,只能响应一个按键,发送时已处理。我这边无需再次判断。

		if((FaceKeyBK & FaceKey) == 0)		//界面按键(六个个按键,每次只能显示一个按键)
		{
			FaceKeyBK = 0;
			for(i=0;i<6;i++)
			{
				if(((FaceKey>>i)& 0x01) == 0x01)
				{
					FaceKeyBK ^= 1<<i;
					break;
				}
			}
		}
		else
		{
			FaceKeyBK = 0;
		}

		for(i=0;i<4;i++)		  			//对讲按键(四个按键,每次可以显示多个按键)
		{
			if(((TalkKey>>i)& 0x01) == 0x01)
				TalkKeyBK ^= 1<<i;
		}

		if((EfctKeyBK & EfctKey) == 0)		//效果按键(四个按键,每次只能显示一个按键)
		{
			EfctKeyBK = 0;
			for(i=0;i<4;i++)
			{
				if(((EfctKey>>i)& 0x01) == 0x01)
				{
					EfctKeyBK ^= 1<<i;
					break;
				}
			}
		}
		else
		{
			EfctKeyBK = 0;
		}

		if((ScenKeyBK & ScenKey) == 0)		//场景按键(四个按键,每次只能显示一个按键)
		{
			ScenKeyBK = 0;
			for(i=0;i<4;i++)
			{
				if(((ScenKey>>i)& 0x01) == 0x01)
				{
					ScenKeyBK ^= 1<<i;
					break;
				}
			}
		}
		else
		{
			ScenKeyBK = 0;
		}

		if(ManKeyFlg == 1)	//在这里判断不合理。比如,程序运行在此处时按下按键,则还未
		{					//处理按键信息,便发送按键状态,则发送的是上一次的按键状态。
			TxMessage.RTR = CAN_RTR_DATA;
			TxMessage.IDE = CAN_ID_STD;
			TxMessage.DLC = 4;
			TxMessage.StdId = 0x011;
			TxMessage.Data[0] = FaceKeyBK;
			TxMessage.Data[1] = ScenKeyBK;
			TxMessage.Data[2] = EfctKeyBK;
			TxMessage.Data[3] = TalkKeyBK;
			CAN_Transmit(CAN1, &TxMessage);

			ManKeyFlg = 0;
		}
//改进的方法:(12-07)
//将if(ManKeyFlg == 1)这句判断语句放到前面,所有按键的处理,均在if(){}语句中。这样,
//无论什么时候有按键到来,也一定会在if(ManKeyFlg == 1)语句中执行到,不会出现前面的
//误操作的情况。
//对于每分钟发送刷新三次按键状态,则在if(ManKeyFlg == 1){}语句完成之后,再发送。

			printf("FaceKey = 0x%X\n",FaceKey);

			printf("TalkKey = 0x%X\n",TalkKey);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -