初级会员
- 积分
- 99
- 金钱
- 99
- 注册时间
- 2016-11-20
- 在线时间
- 20 小时
|
本帖最后由 SIT1366682582 于 2016-12-12 14:58 编辑
OS_EVENT *GO_MBOX;
OS_EVENT *COME_MBOX;
#define START_TASK_PRIO 18
#define START_STK_SIZE 128
OS_STK START_TASK_STK[START_STK_SIZE];
void start_task(void *pdata); //èÎÎñoˉêy
#define LED_TASK_PRIO 13
#define LED_STK_SIZE 64
OS_STK LED_TASK_STK[LED_STK_SIZE];
void led_task(void *pdata);
#define NINE_TASK_PRIO 11
#define NINE_TASK_STK_SIZE 256
OS_STK NINE_TASK_STK[NINE_TASK_STK_SIZE];
void nine_task(void *pdata);
#define UDP_SENT_PRIO 10
#define UDP_SENT_STK_SIZE 500
OS_STK UDP_SENT_TASK_STK[UDP_SENT_STK_SIZE];
void udp_send_task(void *arg);
#define UDP_RECV_PRIO 9
#define UDP_RECV_STK_SIZE 400
OS_STK UDP_RECV_TASK_STK[UDP_RECV_STK_SIZE];
void udp_recv_task(void *arg);
#define MOTOR_CONTR_TASK_PRIO 8
#define MOTOR_CONTR_TASK_STK_SIZE 128
OS_STK MOTOR_CONTR_TASK_STK[MOTOR_CONTR_TASK_STK_SIZE];
void motor_contr_task(void *pdata);
/**************************************************************
main
**************************************************************/
int main(void)
{
delay_init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
uart_init(115200);
usmart_dev.init(72);
my_mem_init(SRAMIN);
printf("ENC28J60+STM32\r\n");
printf("UDP NETCONN Test\r\n");
printf("ATOM@ALIENTEK\r\n");
printf("2016/11/30\r\n");
OSInit();
while(lwip_comm_init())
{
printf("Lwip Init failed!\r\n");
delay_ms(500);
}
printf("Lwip Init Success!\r\n");
OSTaskCreate(start_task,(void*)0,(OS_STK*)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO);
OSStart();
}
void start_task(void *pdata)
{
OS_CPU_SR cpu_sr;
pdata = pdata ;
OSStatInit();
OS_ENTER_CRITICAL();
OSTaskCreate(nine_task,
(void*)0,
(OS_STK*)&NINE_TASK_STK[NINE_TASK_STK_SIZE - 1],
NINE_TASK_PRIO);
OSTaskCreate(led_task,
(void*)0,
(OS_STK*)&LED_TASK_STK[LED_STK_SIZE-1],
LED_TASK_PRIO);
OSTaskCreate(motor_contr_task,
(void*)0,
(OS_STK*)&MOTOR_CONTR_TASK_STK[MOTOR_CONTR_TASK_STK_SIZE-1],
MOTOR_CONTR_TASK_PRIO);
OSTaskCreate(udp_send_task,
(void*)0,
(OS_STK*)&UDP_SENT_TASK_STK[UDP_SENT_STK_SIZE-1],
UDP_SENT_PRIO);
OSTaskCreate(udp_recv_task,
(void*)0,
(OS_STK*)&UDP_RECV_TASK_STK[UDP_RECV_STK_SIZE-1],
UDP_RECV_PRIO);
OSTaskSuspend(OS_PRIO_SELF);
OS_EXIT_CRITICAL();
}
//电机控制任务
void motor_contr_task(void *pdata)
{
INT8U OS_err;
char *msg;
uint8_t Mo_flag = 0;
Motor_contr_Init();
TIM3_PWM_Init(35999,1);
OSTimeDlyHMSM(0,0,0,100);
for(;;)
{
msg = (char *)OSMboxPend(COME_MBOX,50,&OS_err);
if(OS_err == OS_ERR_NONE)
{
if (*msg == 'M' && *(msg+1) == 'C')
{
Mo_flag = 1;
if (Mo_flag && *(msg+2) == 'l' && *(msg+3) == 'f')
{
puls_left(35999,5000,0);
}
else if (Mo_flag &&(*msg+4) == 'l' && *(msg+5) == 'g')
{
puls_ligt(35999,5000,1);
}
Mo_flag = 0;
}
}
else
{
OSTimeDlyHMSM(0,0,0,10);
}
OSTimeDlyHMSM(0,0,0,50);
}
}
//电机转动固定方向固定脉冲
void Motor_contr_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE, ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3
|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(GPIOE,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_OD;
GPIO_Init(GPIOC,&GPIO_InitStructure);
}
void puls_left(u16 f,u16 count,u8 direction)
{
unsigned char flag=1;
u16 number,temp=count;
GPIO_ResetBits(GPIOE,GPIO_Pin_2);
GPIO_ResetBits(GPIOE,GPIO_Pin_1);
TIM3_PWM_Init(f,1);
TIM_SetCompare3(TIM3,f/2);
if(GPIO_ReadOutputDataBit(GPIOE, GPIO_Pin_1) == direction)
{
LED1=0;
}
else
{
LED1=1;
}
do{
number=TIM3->CNT ;
if(flag&&number>=f/2)
{
temp=temp-1;
flag=0;
}
if(number>=1&&number<f/2)
{
flag=1;
}
}
while(temp>0);
GPIO_SetBits(GPIOE,GPIO_Pin_2);
LED1=1;
if(!temp)
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, DISABLE);
}
void puls_ligt(u16 f,u16 count,u8 direction)
{
unsigned char flag=1;
u16 number,temp=count;
GPIO_ResetBits(GPIOE,GPIO_Pin_2);
GPIO_SetBits(GPIOE,GPIO_Pin_1);
TIM3_PWM_Init(f,1);
TIM_SetCompare3(TIM3,f/2);
if(GPIO_ReadOutputDataBit(GPIOE, GPIO_Pin_1) == direction)
{
LED0=0;
}
else
{
LED0=1;
}
do{
number=TIM3->CNT ;
if(flag&&number>=f/2)
{
temp=temp-1;
flag=0;
}
if(number>=1&&number<f/2)
{
flag=1;
}
}
while(temp>0);
GPIO_SetBits(GPIOE,GPIO_Pin_2);
LED0=1;
if(!temp)
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, DISABLE);
}
|
|