新手入门
- 积分
- 26
- 金钱
- 26
- 注册时间
- 2014-7-25
- 在线时间
- 0 小时
|
5金钱
void TIM_ICAPConfiguration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_ICInitTypeDef TIM_ICInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
/* TIM2 channel 2 pin (PA.01) configuration */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
TIM_DeInit(TIM2);
TIM_InternalClockConfig(TIM2);
TIM_TimeBaseStructure.TIM_Prescaler = 35999;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_Period = 1999;
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
TIM_ARRPreloadConfig(TIM2, DISABLE);
TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
TIM_ICInitStructure.TIM_ICFilter = 0x0; /*选择输入比较滤波器,滤波设置,经历几个周期跳变认定波形稳定0x0~0xF*/
TIM_ICInit(TIM2, &TIM_ICInitStructure);
TIM_PWMIConfig(TIM2, &TIM_ICInitStructure); //根据参数配置TIM外设信息
TIM_SelectInputTrigger(TIM2, TIM_TS_TI2FP2); //选择IC2为始终触发源
TIM_SelectSlaveMode(TIM2,TIM_SlaveMode_Reset);//TIM从模式:触发信号的上升沿重新初始化计数器和触发寄存器的更新事件
TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable); //启动定时器的被动触发
//开启TIM2的中断
TIM_ClearFlag(TIM2, TIM_IT_CC2);
TIM_ITConfig(TIM2,TIM_IT_CC2,ENABLE);
TIM_Cmd(TIM2, ENABLE); //使能TIMx外设
}
以上为定时器的配置
void TIM2_IRQHandler(void)
{
TIM_ClearITPendingBit(TIM2, TIM_IT_CC2); //清楚TIM的中断待处理位
IC2Value = TIM_GetCapture2(TIM2); //读取IC2捕获寄存器的值,即为PWM周期的计数值
if (IC2Value != 0)
{
// DutyCycle = (TIM_GetCapture1(TIM2) * 100) / IC2Value; //读取IC1捕获寄存器的值,并计算占空比
Frequency = 72000000 / IC2Value; //计算PWM频率。
}
else
{
// DutyCycle = 0;
Frequency = 0;
}
}
以上为中断服务函数
将PA.1脚接到信号发生器上,输入一个30KHZ的方波,通过串口看到的数据会有错误
这是为什么?
|
-
|