是的,我也是这么想的,手上的这款电机是自带霍尔传感器的。
void TIM_Input_Init()
{
u16 arr,psc;
{
GPIO_InitTypeDef GPIO_InitStructure; //ÉùÃ÷Ò»¸ö½á¹¹Ìå±äÁ¿£¬ÓÃÀ´³õʼ»¯GPIO
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;//ÉùÃ÷Ò»¸ö½á¹¹Ìå±äÁ¿£¬ÓÃÀ´³õʼ»¯¶¨Ê±Æ÷
TIM_ICInitTypeDef TIM4_ICInitStructure;//¸ù¾ÝTIM_OCInitStructÖÐÖ¸¶¨µÄ²ÎÊý³õʼ»¯ÍâÉèTIMx
NVIC_InitTypeDef NVIC_InitStructure;
/* ¿ªÆôʱÖÓ */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);
//RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
/* ÅäÖÃGPIOµÄģʽºÍIO¿Ú */
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING ;//
GPIO_ResetBits(GPIOD,GPIO_Pin_12);
GPIO_Init(GPIOD, &GPIO_InitStructure);
//TIM4¶¨Ê±Æ÷³õʼ»¯
TIM_DeInit(TIM4);
TIM_InternalClockConfig(TIM4);
TIM_TimeBaseInitStructure.TIM_Period = 1999;
TIM_TimeBaseInitStructure.TIM_Prescaler = 3599;
TIM_TimeBaseInitStructure.TIM_ClockDivision = 0;//
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //
TIM_TimeBaseInit(TIM4, & TIM_TimeBaseInitStructure);
// GPIO_PinRemapConfig(GPIO_FullRemap_TIM4,ENABLE);//¸Ä±äÖ¸¶¨¹Ü½ÅµÄÓ³Éä //pC7
//NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel=TIM4_IRQn; //´ò¿ªTIM3_IRQnµÄÈ«¾ÖÖжÏ
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0; //ÇÀÕ¼ÓÅÏȼ¶Îª0
NVIC_InitStructure.NVIC_IRQChannelSubPriority=2; //ÏìÓ¦ÓÅÏȼ¶Îª1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //ʹÄÜ
NVIC_Init(&NVIC_InitStructure);
//PWM³õʼ»¯ //¸ù¾ÝTIM_OCInitStructÖÐÖ¸¶¨µÄ²ÎÊý³õʼ»¯ÍâÉèTIMx
TIM4_ICInitStructure.TIM_Channel=TIM_Channel_1;
TIM4_ICInitStructure.TIM_ICFilter=0x0;
TIM4_ICInitStructure.TIM_ICPolarity=TIM_ICPolarity_Falling ;
TIM4_ICInitStructure.TIM_ICPrescaler=TIM_ICPSC_DIV1 ;
TIM4_ICInitStructure.TIM_ICSelection=TIM_ICSelection_DirectTI ;
TIM_ICInit(TIM4,&TIM4_ICInitStructure);
TIM_ClearFlag(TIM4, TIM_IT_CC1);
TIM_ITConfig(TIM4,TIM_IT_Update|TIM_IT_CC3,ENABLE);
TIM_Cmd(TIM4,ENABLE);//ʹÄÜ»òÕßʧÄÜTIMxÍâÉè
}
}
void TIM4_IRQHandler(void) //TIM4??
{
u16 count_num=0;
if(TIM_GetITStatus(TIM4, TIM_IT_CC1) == SET)//È·ÈÏÖÐ¶Ï ·¢Éú
{
// TIM_ClearITPendingBit(TIM4, TIM_IT_CC1); //Çå³ýÖжÏ
count_num++;
if (count_num == 900)
{
TIM_Cmd(TIM3,DISABLE);
}
}
}
我真的是新手,始终做不到“count_num++”
我也曾想 读取管脚 状态,变量++,最终也是没有实现,真菜!
|