找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1347|回复: 0
打印 上一主题 下一主题
收起左侧

can小板的程序

[复制链接]
跳转到指定楼层
楼主
ID:134779 发表于 2016-7-24 00:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/**
  ******************************************************************************
  * Îļ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("PM=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;PR=%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;PA=%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);
    }
       
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表