| /** ****************************************************************************** * ÎļtÃû£o * ×÷Õߣo huang_4115@126.com * °æ±¾£o V1.0.0 * èÕÆú£o 2013- * Õaòa£o èÎÎñoˉêy ****************************************************************************** * ËμÃ÷£o * ****************************************************************************** **/ #include "includes.h" OS_STK task_demo_stk[TASK_DEMO_STK_SIZE]; //¶¨òåÕ» OS_STK task_cmd_stk[TASK_CMD_STK_SIZE]; OS_EVENT *Mbox_Can1; u8 UM = 2; /** * ËμÃ÷£o * êäèë£o * êä3ö£o **/ void Task_Start(void *p_arg) { OSTaskCreate(Task_Demo, (void *)0, &task_demo_stk[TASK_DEMO_STK_SIZE-1], TASK_DEMO_PRIO); OSTaskCreate(Task_CMD, (void *)0, &task_cmd_stk[TASK_CMD_STK_SIZE-1], TASK_CMD_PRIO); Mbox_Can1 = OSMboxCreate((void *)0); LED3_ON; //Ïèμãááled3 OSTimeDly(300); //μè′yelmoíêè«1¤×÷ printf("MO=0;"); printf("UM=%d;",UM); //ĬèÏê1óÃËù¶èÄ£ê½ á¢¿ì¼óÔØËù¶è printf(" M=1;");printf("AC=2000000;"); printf("DC=2000000;"); printf("MO=1;"); printf("EC;"); //èç1ûᬽóÎTÎó£¬′Ë걻Ὣled3ϨÃe while (1) { IWDG_Init(IWDG_Prescaler_4,1000); //3¬ê±100ms¸′λ OSTaskSuspend(STARTUP_TASK_PRIO); } } /** * ËμÃ÷£o * êäèë£o * êä3ö£o **/ void Task_Demo(void *p_arg) { u16 temp; u32 err_code=0,*perr_code; s32 speed; s32 position; while(1) { if(CAN_ReadCnt!=CAN_WriteCnt) { temp = CAN_ReadCnt%CAN1_BUF_SIZE; switch(RxMessage[temp].Data[0]) { case 'v': //Ëù¶èÄ£ê½ case 'V': speed = (s16)((RxMessage[temp].Data[1]<<8)|RxMessage[temp].Data[2])*RPM2CPS; if(UM != 2) { UM = 2; //ê1óÃËù¶èÄ£ê½ á¢¿ì¼óÔØËù¶è printf("MO=0;"); printf("UM=%d;",UM); printf("MO=1;"); } printf("JV=%d;BG;",speed); break; case 'p': //λÖÃÄ£ê½ case 'P': if((RxMessage[temp].Data[1] == 'R')||(RxMessage[temp].Data[1] == 'r')) { speed = (s16)((RxMessage[temp].Data[2]<<8)|RxMessage[temp].Data[3])*RPM2CPS; position = (RxMessage[temp].Data[4]<<24)|(RxMessage[temp].Data[5]<<16)| \ (RxMessage[temp].Data[6]<<8)|(RxMessage[temp].Data[7]); if(UM != 5) { UM = 5; //ê1óÃλÖÃģ꽣¬Ïè¼óÔØÎ»Öã¬Ôù¼óÔØËù¶è printf("MO=0;"); printf("UM=%d;",UM); printf("MO=1;"); } printf("SP=%d R=%d;BG;",speed,position);} else if((RxMessage[temp].Data[1] == 'A')||(RxMessage[temp].Data[1] == 'a')) { speed = (s16)((RxMessage[temp].Data[2]<<8)|RxMessage[temp].Data[3])*RPM2CPS; position = (RxMessage[temp].Data[4]<<24)|(RxMessage[temp].Data[5]<<16)| \ (RxMessage[temp].Data[6]<<8)|(RxMessage[temp].Data[7]); if(UM != 5) { UM = 5; //ê1óÃλÖÃģ꽣¬Ïè¼óÔØÎ»Öã¬Ôù¼óÔØËù¶è printf("MO=0;"); printf("UM=%d;",UM); printf("MO=1;"); } printf("SP=%d A=%d;BG;",speed,position);} break; case 'm': //ê1Äü¡¢ê§Äüμç»ú case 'M': if((RxMessage[temp].Data[1] == 'O')||(RxMessage[temp].Data[1] == 'o')) { if(RxMessage[temp].Data[3] == '0') printf("MO=0;"); else printf("MO=1;"); } if((RxMessage[temp].Data[1] == 'F')||(RxMessage[temp].Data[1] == 'f')) //μç»úê§ÄüDÅÏ¢ { USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); printf("MF;"); //»ñè¡μç»úê§Äü′íÎóÂë } break; case 'e': //2éÑˉ′íÎó case 'E': if((RxMessage[temp].Data[1] == 'C')||(RxMessage[temp].Data[1] == 'c')) { USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); printf("MO=1;"); //Ïè·¢ò»¸öÃüáî2úéú×îDÂ′íÎóÂë printf("EC;"); //»ñè¡′íÎóÂë } break; case 'r': //èí¼t¸′λ case 'R': if((RxMessage[temp].Data[1] == 'B')||(RxMessage[temp].Data[1] == 'b')) SoftReset(); break; /*ÆäËû1|Äü¿é×ÔDDà©Õ1*/ default: break; } CAN_ReadCnt++; } perr_code = OSMboxAccept(Mbox_Can1); if(perr_code!=0) //¸øÖ÷¿Ø·¢Ëí′íÎóÂë { err_code = *perr_code; TxMessage.DLC=4; //Ö¡3¤¶è 0~8 TxMessage.Data[0]=(err_code) >>24; TxMessage.Data[1]=(err_code) >>16; TxMessage.Data[2]=(err_code) >>8; TxMessage.Data[3]=(err_code) ; CAN1_SendMsg(); } IWDG_Feed(); } } /** * ËμÃ÷£o * êäèë£o * êä3ö£o **/ void Task_CMD(void *p_arg) { while (1) { CPL_LED1; OSTimeDly(500); } } |
| 欢迎光临 迅维网 (https://www.chinafix.com/) | Powered by Discuz! X3.4 |