打印

用STM32的TIM8_CH1通道做PWM输入捕捉,不进中断

[复制链接]
10639|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jgphu|  楼主 | 2011-11-28 16:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天下午在调一个PWM输入捕捉,搞了很久,发现进不了中断.

原程序如下,望高手帮忙分析一下.

TIM8初始化

void TIM8_Configuration (void)
{
  uint16_t PrescalerValue = 0;
  
  /* Compute the prescaler value 1MHz, CLK1MAX = 36MHz*/
  PrescalerValue = (uint16_t) ((SystemCoreClock/2) / 1000000) - 1;
  /* Time base configuration */
  TIM_TimeBaseStructure.TIM_Period = 0xffff;                                     //定时65.536ms
  TIM_TimeBaseStructure.TIM_Prescaler = 0;
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure);
  
  /* Prescaler configuration */
  TIM_PrescalerConfig(TIM8, PrescalerValue, TIM_PSCReloadMode_Immediate);
  
  /* TIM8 configuration: PWM Input mode ------------------------
     The external signal is connected to TIM8 CH1 pin (PC.06),
     The Rising edge is used as active edge,
     The TIM8 CCR1 is used to compute the frequency value
     The TIM3 CCR2 is used to compute the duty cycle value
  ------------------------------------------------------------ */
  TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;
  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;
  
  TIM_PWMIConfig(TIM8, &TIM_ICInitStructure);
  
  /* Select the TIM8 Input Trigger: TI1FP1 */
  TIM_SelectInputTrigger(TIM8, TIM_TS_TI1FP1);
  
  /* Select the slave Mode: Reset Mode */
  TIM_SelectSlaveMode(TIM8, TIM_SlaveMode_Reset);
  
  /* Enable the Master/Slave Mode */
  TIM_SelectMasterSlaveMode(TIM8, TIM_MasterSlaveMode_Enable);
  
  /* TIM enable counter */
  TIM_Cmd(TIM8, ENABLE);
  
  /* Enable the CC1 Interrupt Request */
  TIM_ITConfig(TIM8, TIM_IT_CC1, ENABLE);
}

GPIO初始化就不贴了,PC6配成GPIO_Mode_IN_FLOATING.

时钟

  /* TIM8 Periph clock enable */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE);
  /* APB2 AFIO clock enable */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  /* GPIO clock enable */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD, ENABLE);

中断使能打开

  NVIC_InitStructure.NVIC_IRQChannel = TIM8_CC_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);


中断向量函数

void BSP_IntHandlerTIM8_CC (void)
{  
  LED ^= 1;     //LED灯亮灭取反
  /* Clear TIM8 Capture compare interrupt pending bit */
  TIM_ClearITPendingBit(TIM8, TIM_IT_CC1);
  }
沙发
香水城| | 2011-11-28 17:03 | 只看该作者
固件库中有一个使用TIM3的例子,LZ可以参考。

使用特权

评论回复
板凳
jgphu|  楼主 | 2011-11-28 17:31 | 只看该作者
已经仔细的看过那个例子了.

使用特权

评论回复
地板
jgphu|  楼主 | 2011-11-28 18:43 | 只看该作者
因为我用的是PC6口,我试着用PC6的REMAP为TIM3_CH1.

软件都是一样的,就是所有的TIM8改为TIM3.

增加了一条GPIO REMAP语句.

中断向量的地址用的时TIM3的中断向量.

结果: 是可以进捕获中断的.

使用特权

评论回复
5
香水城| | 2011-11-29 10:01 | 只看该作者
很多型号中没有TIM8。

使用特权

评论回复
6
jgphu|  楼主 | 2011-12-7 13:58 | 只看该作者
我用的型号是STM32F103RBT6  , 没有TIM8.  悲啊:funk:

使用特权

评论回复
7
香水城| | 2011-12-7 18:00 | 只看该作者
我用的型号是STM32F103RBT6  , 没有TIM8.  悲啊:funk:
jgphu 发表于 2011-12-7 13:58


确实挺杯具的,如果一开始能够看一眼(哪怕就一眼)手册,就不会浪费那么多时间了。

使用特权

评论回复
8
摩天轮1111| | 2015-12-6 23:48 | 只看该作者
香水城 发表于 2011-12-7 18:00
确实挺杯具的,如果一开始能够看一眼(哪怕就一眼)手册,就不会浪费那么多时间了。 ...

我用的stm32f103 vct6 有tim8啊,但是我也是不可以进中断,就是进不去中断,换成tim2也进不去中断
https://bbs.21ic.com/icview-1226806-1-1.html

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

642

帖子

2

粉丝