int main(){ Init_UART(); Init_BT(); Init_Default_Led(); Init_WU(); SystemInit(); if(SysTick_Config(SystemCoreClock / 1000)){ while(1); } char str[256]; sprintf(str,"\n\nFlash Size : %dKb\nUID : %X%X%X\n",*(volatile u16*)(0x1FFFF7E0), *(volatile u32*)(0x1FFFF7E8),*(volatile u32*)(0x1FFFF7EC),*(volatile u32*)(0x1FFFF7F0)); USART1_Send_Sting(str); BT_Send_String(str); while(1){ GPIO_SetBits(GPIOC,GPIO_Pin_13); Delay(1000); GPIO_ResetBits(GPIOC,GPIO_Pin_13); PWR_StandbyMode(); } }
void Get_Data_Send(void) { // 获取手柄数据 Get_PS_Data(); // 判断手柄处于哪种模式 switch(CONL.PS->PS_Data[0]) { // 数字模式 case Digital_Mode: PS_Digital_Mode(); // 判断数据是否有效(有按键按下),当FF_Flag=1时也会进, // 目的是为了在按键松开后多发送几次停止数据,防止底盘漏接收帧 if(FF_Flag||(CONL.PS->PS_Data[2] != 0xff)||(CONL.PS->PS_Data[3] != 0xff)) { // 发送有效数据 BT_Send_String(CONL.PS->PS_Data,1);// 包头 BT_Send_String(CONL.PS->PS_Data+2,2);// 有效数据 // 发送包尾 BT_Send_String(head_end,1); // count用于发送停止数据计数,FF_Flag为标志位 if((count < 10)&&(CONL.PS->PS_Data[2] == 0xff)\ &&(CONL.PS->PS_Data[3] == 0xff))//没有有效数据,清标志位 { count++; if(count >= 10) FF_Flag = 0; } else { FF_Flag = 1; count = 0; } } break; // 模拟模式,与数字模式类似,不在赘述 case Analog_Red: PS_Analog_Red(); if(((CONL.PS->PS_Data[3] & R1) != 0)) { if(FF_Flag||(CONL.PS->PS_Data[2] != 0xff)||\ (CONL.PS->PS_Data[3] != 0xff))// 有有效数据 { BT_Send_String(A2D,1); BT_Send_String(CONL.PS->PS_Data+2,2); BT_Send_String(head_end,1); if((count < 10)&&(CONL.PS->PS_Data[2] == 0xff)\ &&(CONL.PS->PS_Data[3] == 0xff)) { count++; if(count >= 10) FF_Flag = 0; } else { FF_Flag = 1; count = 0; } } } else { BT_Send_String(CONL.PS->PS_Data,1); BT_Send_String(CONL.PS->PS_Data+2,6); BT_Send_String(head_end,1); } break; default: break; } }