//use tim8,cc1 void Enc1Config(Encoder* me) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); GPIO_StructInit(&GPIO_InitStructure); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //channel1 GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //channel2 GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_TIM4); GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_TIM4); TIM_EncoderInterfaceConfig(TIM4, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising); TIM_SetAutoreload(TIM4, 0xffff); TIM_SetCounter(TIM4, 0); // TIM_Cmd(TIM4, ENABLE); me->encoderTIM = TIM4; me->encoderAddr = (unsigned int) &TIM4->CNT; EnableEncoder(me); // TIM_Cmd(TIM4, ENABLE); }
//to avoid overflow void SetEncoder(Encoder * me, int encoderCounter) { DisableEncoder(me); me->accumEncoderCounts = encoderCounter; me->currEncoderCount = 0; me->prevEncoderCount = 0; me->deltaEncoderCount = 0; TIM_SetCounter(me->encoderTIM, 0); EnableEncoder(me); }
void ResetEncoder(Encoder * me) { DisableEncoder(me); me->prevEncoderCount = 0; me->currEncoderCount = 0; me->deltaEncoderCount = 0; me->accumEncoderCounts = 0; TIM_SetCounter(me->encoderTIM, 0); GetEncoderCounts(me); EnableEncoder(me); }
void UserMain( void * pd ) { initWithWeb(); Nunchuck_Init(); // FIXME LLInit(1); TheWSHandler = MyDoWSUpgrade; stepper.Init(); ConfigureStepper( &stepper, 1 ); stepSpeed = 100; stepDir = 1; StartStepper( 1, stepDir, stepSpeed ); stepForever = true; OSSemInit( &SockReadySem, 0 ); OSCritInit( &I2CLock ); iprintf("Application: %s\r\nNNDK Revision: %s\r\n",AppName,GetReleaseTag()); OSTimeDly(2); OSSimpleTaskCreate(ReportTask, 5); OSSimpleTaskCreate(InputTask, MAIN_PRIO-1); OSSimpleTaskCreate(RangingTask, 2); EnableEncoder(EncodeStep, ButtonChange, ButtonDoubleClick ); ClearTaskTimes(); SMPoolPtr pp; while(1) { fd_set error_fds; FD_ZERO( &error_fds ); OSCritEnter( &I2CLock, 0 ); nun.Update(); OSCritLeave( &I2CLock ); serv_x.SetPos(nun.stick.x); serv_y.SetPos(nun.stick.y); // iprintf("%lu\na_x: %4.4d - a_y: %4.4d - a_z: %4.4d\ns_x: %3.3d - s_y: %3.3d - b_z: %d - b_c: %d\n\n", // TimeTick, nun.accel.x, nun.accel.y, nun.accel.z, // nun.stick.x, nun.stick.y, // nun.button.z, nun.button.c); // iprintf("range: %u\n", lidarRange); if (ws_fd > 0){ SendConfigReport(ws_fd); } } }