stm32f103 PWM捕获TIM_GetCapture1没有数据
我用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);
}
页:
[1]