|
滑動變阻器控制舵機程序只能在debug下才能進入PWM定時器中斷,正常運行程序時不能進入定時器中斷,大佬幫忙看看,源程序在附件中。
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
/* led 端口配置 */
LED_GPIO_Config();
delay_config(72);
adcConfig();
/* 定時器初始化 */
GENERAL_TIM_Init();
void ADC1_2_IRQHandler(void)
{
if(ADC_GetITStatus(ADC1 ,ADC_IT_EOC) != RESET)
{
Value = ADC_GetConversionValue (ADC1 );
}
ADC_ClearITPendingBit (ADC1 ,ADC_IT_EOC);
}
void TIM2_IRQHandler(void)
{
if(TIM_GetITStatus(TIM2,TIM_IT_Update) != RESET )
{
TIM_SetCompare3(TIM2,Value*2500/4095);//舵機最大的值是2500對應2.5ms 2500/4095取出ADC每份的量*value
TIM_ClearITPendingBit (TIM2,TIM_IT_Update );
}
}
NVIC_InitStruct.NVIC_IRQChannel = TIM2_IRQn ;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE ;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;
NVIC_Init(&NVIC_InitStruct);
NVIC_InitStruct.NVIC_IRQChannel = ADC1_2_IRQn ;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE ;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2 ;
NVIC_Init(&NVIC_InitStruct);
|
|