初级会员

- 积分
- 93
- 金钱
- 93
- 注册时间
- 2012-5-31
- 在线时间
- 4 小时
|

楼主 |
发表于 2012-6-14 17:32:40
|
显示全部楼层
原子哥 我弄了一下午,配置如下,怎么还是CNT寄存器还是没数据······一直是0;脉冲是从 TIM3_CH1输入!!
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
/* TIM2 clock enable */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
/* GPIOB clock enable */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_TIM3);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Time Base configuration
这个结构体的初始化只是为了初始化TIM1_CKD_DIV4,可以使CK_INT四分频,这样filter的脉冲宽度又可以增
加了。
经测试发现还有一个小问题,就是TIM_Prescaler,第一次count增加不会被分频,之后的就被分频了,可以
参考图1。
*/
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_Period = 0xffff;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
/*下面的中断,可以去掉*/
/* Enable the TIM3 global Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
/*时钟的分频部分参考图2, 图1,图4,图5,
计算:通过图1,PCLK1 = HCLK/16,TIM3CLK = 4M
CK_INT(TIM3CLK)再根据图4分频4,再根据图5分频32,之后采样8次,相当于4M/4/32/8 = 3.9K
*/
TIM_TIxExternalClockConfig(TIM3, TIM_TS_TI1FP1, TIM_ICPolarity_Rising, 0xf); //边沿计数;也可以用TIM_TS_TI1FP1 ,上升沿计数
TIM_SelectInputTrigger(TIM3, TIM_TS_ETRF);
//下面这个是使用ETR输入的,当做参考吧
// /* Selects the external clock Mode 1 for TIM2: the external clock is
// connected to ETR input pin, the rising edge is the active edge, no
// filter sampling is done (ExtTRGFilter = 0) and the prescaler is
// fixed to TIM_ExtTRGPSC_DIV2 */
TIM_ETRClockMode1Config(TIM2, TIM_ExtTRGPSC_OFF,
TIM_ExtTRGPolarity_NonInverted, 0x0);
TIM_SetCounter(TIM3, 0);
/*Enable the CC1 Interrupt Request */
TIM_ITConfig(TIM3, TIM_IT_CC1, ENABLE);
/* TIM enable counter */
TIM_Cmd(TIM3, ENABLE);
|
|