
我用TIM2输入捕获,TIM3进行pwm输出,但是进入中断后TIM_GetCapture1接受到的数据为零 贴上我的驱动代码,希望有其他调试的方法可以推荐 #include "time.h" #include "stm32f10x_tim.h" #include "usart.h" #include "delay.h" TIM_ICInitTypeDef TIM_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; NVIC_InitTypeDef NVIC_InitStructure; u8 DutyCycle = 0; u8 Frequency = 0; u8 IC2Value=0; //定时器2GPIO配置 void TIM2_GPIO_INIT(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //GPIO_InitTypeDef GPIO_InitStructure; //GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2,DISABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //GPIO GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//ÉèÖÃΪ¸¡¿ÕÊäÈ룬ÒÔÃâ¸ÉÈÅ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); } //定时器2输入捕获配置 void TIM2_ICMODE_INIT(void) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); TIM_TimeBaseStructure.TIM_Period=65535; TIM_TimeBaseStructure.TIM_Prescaler=3; TIM_TimeBaseStructure.TIM_ClockDivision= TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode= TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure); //TIM_InitStructure.TIM_ICMode=TIM_ICMode_PWMI;// //TIM2->CCER|=0x1; //TIM2->CCMR1|=0X0011; TIM_ICStructInit(&TIM_InitStructure); TIM_InitStructure.TIM_Channel=TIM_Channel_1; TIM_InitStructure.TIM_ICPolarity=TIM_ICPolarity_Rising;// TIM_InitStructure.TIM_ICSelection=TIM_ICSelection_DirectTI;// TIM_InitStructure.TIM_ICPrescaler=TIM_ICPSC_DIV4;// TIM_InitStructure.TIM_ICFilter = 0x0; //½á¹¹³õʼ»¯ TIM_ICInit(TIM2,&TIM_InitStructure); TIM_SelectInputTrigger(TIM2,TIM_TS_TI2FP2);// TIM_SelectSlaveMode(TIM2,TIM_SlaveMode_Reset); TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable); //¸´Î»Ä£Ê½£¬Ñ¡ÖеĴ¥·¢ÊäÈëÉÏÉýÑØ³õʼ»¯¼ÆÊýÆ÷ //TIM_SelectInputTrigger(TIM2,TIM_TS_TI2FP2); // // TIM_SelectSlaveMode(TIM2,TIM_SlaveMode_Reset); //ʹÄÜ´Óģʽ TIM_Cmd(TIM2, ENABLE); //定时器2中断使能 NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; //NVIC NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); //??TIM2 /* Enable the CC2 Interrupt Request */ TIM_ITConfig(TIM2,TIM_IT_CC2|TIM_IT_Update,ENABLE);// } //定时器2中断函数,占空比,频率计数 void TIM2_IRQHandler(void) { TIM_ClearFlag(TIM2,TIM_FLAG_CC2); TIM_ClearITPendingBit(TIM2,TIM_IT_CC2|TIM_IT_Update); //|TIM_IT_Update //TIM_ClearFlag(TIM2,TIM_FLAG_Update); delay_ms(2); IC2Value = TIM_GetCapture2(TIM2); if (IC2Value != 0) { //DutyCycle = (TIM_GetCapture2(TIM2))*100 / IC2Value; //printf("tim2:%d",TIM_GetCapture2(TIM2)); Frequency = 72000000 / IC2Value; DutyCycle = (TIM_GetCapture1(TIM2))*100 / IC2Value; delay_ms(2); } else { DutyCycle = 0; Frequency = 0; } } //定时器3GPIO配置 void TIM3_GPIO_Config(void) { // //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//| RCC_APB2Periph_GPIOB GPIO_InitStructure.GPIO_Pin= GPIO_Pin_7 ;//|GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStructure);// } //定时器3PWM输出配置 void TIM3_OCMODE_INIT(void) { u16 CCR1_Val= 200; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); TIM_TimeBaseStructure.TIM_Period= 1000-1; TIM_TimeBaseStructure.TIM_Prescaler=7199;// TIM_TimeBaseStructure.TIM_ClockDivision=0;// TIM_CKD_DIV1 TIM_TimeBaseStructure.TIM_CounterMode= TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure); //FREQRENCY=int_CLK/((TIM_Period+1)*(TIM_Prescaler+1)) TIM_OCStructInit(&TIM_OCInitStructure); TIM_OCInitStructure.TIM_OCMode= TIM_OCMode_PWM1; //TIM_OCInitStructure.TIM_Channel= TIM_Channel_1; TIM_OCInitStructure.TIM_Pulse=CCR1_Val;// TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//TIM_OCPolarity_High TIM_OC2Init(TIM3,&TIM_OCInitStructure); //TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable); //TIM_ARRPreloadConfig(TIM3, ENABLE); TIM_Cmd(TIM3,ENABLE); } |
TEST _2.rar
下载5 MB, 下载次数: 10, 下载积分: ST金币 -1