打印

求助:TIM1定时器编译错误

[复制链接]
9482|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
飞絮飘飘|  楼主 | 2012-6-12 08:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 飞絮飘飘 于 2012-6-12 08:39 编辑

想用TIM1做一个基本的定时器练习,结果编译不过去,代码如下:
void NVIC_Configuration(void)
{
     NVIC_InitTypeDef NVIC_InitStructure;
     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
     NVIC_InitStructure.NVIC_IRQChannel =TIM1_UP_IRQHandler;
     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
     NVIC_Init(&NVIC_InitStructure);

}

编译的错误提示为:
user\main.c(132): error:#20: identifier "TIM1_UP_IRQHandler" is undefined
指示TIM1_UP_IRQHandler这个中断未定义,我把它换成TIM1_CC_IRQChannel,结果编译后提示:
user\main.c(133): error: #20: identifier "TIM1_CC_IRQChannel" is undefined
后来发现所有TIM1的中断都不能编译,芯片是F107VC, 请教这是怎么回事?
沙发
jgphu| | 2012-6-12 10:04 | 只看该作者
这个不能乱改的,你要找它的定义才行。

在stm32f10x.h里有定义
#ifdef STM32F10X_HD
  ADC1_2_IRQn                 = 18,     /*!< ADC1 and ADC2 global Interrupt                       */
  USB_HP_CAN1_TX_IRQn         = 19,     /*!< USB Device High Priority or CAN1 TX Interrupts       */
  USB_LP_CAN1_RX0_IRQn        = 20,     /*!< USB Device Low Priority or CAN1 RX0 Interrupts       */
  CAN1_RX1_IRQn               = 21,     /*!< CAN1 RX1 Interrupt                                   */
  CAN1_SCE_IRQn               = 22,     /*!< CAN1 SCE Interrupt                                   */
  EXTI9_5_IRQn                = 23,     /*!< External Line[9:5] Interrupts                        */
  TIM1_BRK_IRQn               = 24,     /*!< TIM1 Break Interrupt                                 */
  TIM1_UP_IRQn                = 25,     /*!< TIM1 Update Interrupt                                */
  TIM1_TRG_COM_IRQn           = 26,     /*!< TIM1 Trigger and Commutation Interrupt               */
  TIM1_CC_IRQn                = 27,     /*!< TIM1 Capture Compare Interrupt                       */
  TIM2_IRQn                   = 28,     /*!< TIM2 global Interrupt                                */
  TIM3_IRQn                   = 29,     /*!< TIM3 global Interrupt                                */
  TIM4_IRQn                   = 30,     /*!< TIM4 global Interrupt                                */
  I2C1_EV_IRQn                = 31,     /*!< I2C1 Event Interrupt                                 */
  I2C1_ER_IRQn                = 32,     /*!< I2C1 Error Interrupt                                 */
  I2C2_EV_IRQn                = 33,     /*!< I2C2 Event Interrupt                                 */
  I2C2_ER_IRQn                = 34,     /*!< I2C2 Error Interrupt                                 */
  SPI1_IRQn                   = 35,     /*!< SPI1 global Interrupt                                */
  SPI2_IRQn                   = 36,     /*!< SPI2 global Interrupt                                */
  USART1_IRQn                 = 37,     /*!< USART1 global Interrupt                              */
  USART2_IRQn                 = 38,     /*!< USART2 global Interrupt                              */
  USART3_IRQn                 = 39,     /*!< USART3 global Interrupt                              */
  EXTI15_10_IRQn              = 40,     /*!< External Line[15:10] Interrupts                      */
  RTCAlarm_IRQn               = 41,     /*!< RTC Alarm through EXTI Line Interrupt                */
  USBWakeUp_IRQn              = 42,     /*!< USB Device WakeUp from suspend through EXTI Line Interrupt */
  TIM8_BRK_IRQn               = 43,     /*!< TIM8 Break Interrupt                                 */
  TIM8_UP_IRQn                = 44,     /*!< TIM8 Update Interrupt                                */
  TIM8_TRG_COM_IRQn           = 45,     /*!< TIM8 Trigger and Commutation Interrupt               */
  TIM8_CC_IRQn                = 46,     /*!< TIM8 Capture Compare Interrupt                       */
  ADC3_IRQn                   = 47,     /*!< ADC3 global Interrupt                                */
  FSMC_IRQn                   = 48,     /*!< FSMC global Interrupt                                */
  SDIO_IRQn                   = 49,     /*!< SDIO global Interrupt                                */
  TIM5_IRQn                   = 50,     /*!< TIM5 global Interrupt                                */
  SPI3_IRQn                   = 51,     /*!< SPI3 global Interrupt                                */
  UART4_IRQn                  = 52,     /*!< UART4 global Interrupt                               */
  UART5_IRQn                  = 53,     /*!< UART5 global Interrupt                               */
  TIM6_IRQn                   = 54,     /*!< TIM6 global Interrupt                                */
  TIM7_IRQn                   = 55,     /*!< TIM7 global Interrupt                                */
  DMA2_Channel1_IRQn          = 56,     /*!< DMA2 Channel 1 global Interrupt                      */
  DMA2_Channel2_IRQn          = 57,     /*!< DMA2 Channel 2 global Interrupt                      */
  DMA2_Channel3_IRQn          = 58,     /*!< DMA2 Channel 3 global Interrupt                      */
  DMA2_Channel4_5_IRQn        = 59      /*!< DMA2 Channel 4 and Channel 5 global Interrupt        */
#endif /* STM32F10X_HD */

使用特权

评论回复
板凳
airwill| | 2012-6-12 10:16 | 只看该作者
是不是弄错了库的版本
或者没有设定好库, 以及包含合适的 .h 文件.
在 2.0 的库 TIM1_UP_IRQHandler 定义在 stm32f10x_nvic.h 里
在 3.0 以上的库. 用  TIM1_UP_IRQn 了, 定义在 stm32f10x.h 里

使用特权

评论回复
地板
飞絮飘飘|  楼主 | 2012-6-12 10:34 | 只看该作者
很抱歉,我没明白2楼的意思,我没有改动任何头文件里的内容,我打开头文件确实看到你列出的这些内容,但不知道你帖出来是为什么。我把整个项目放在附件里,求高手看看,这里先谢了。

Tim1_中断.rar

1.42 MB

使用特权

评论回复
5
jgphu| | 2012-6-12 14:49 | 只看该作者
我帖出来的是中断向量表。你的程序每次进中断都会查询这个表。

你的NVIC初始化的时候,通道名字要与定义的相同,例如:

  NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
  
  NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

使用特权

评论回复
6
jgphu| | 2012-6-12 14:50 | 只看该作者
TIM1_BRK_IRQn               = 24,     /*!< TIM1 Break Interrupt                                 */
  TIM1_UP_IRQn                = 25,     /*!< TIM1 Update Interrupt                                */
  TIM1_TRG_COM_IRQn           = 26,     /*!< TIM1 Trigger and Commutation Interrupt               */
  TIM1_CC_IRQn                = 27,     /*!< TIM1 Capture Compare Interrupt                       */

使用特权

评论回复
7
jgphu| | 2012-6-12 14:51 | 只看该作者
我用的库是V3.5.0

使用特权

评论回复
8
飞絮飘飘|  楼主 | 2012-6-12 15:37 | 只看该作者
非常感谢你的回复,改成你给的向量,编译通过了,我从网上找的例子,而且很多个例子都是这样的,又打开启动文件也是这样的,困惑了一整天。

使用特权

评论回复
9
寂寞西瓜| | 2012-6-13 17:59 | 只看该作者
库版本的问题,新版本有些定义有变化,比如你用的3.5和以前2.0就有区别,老版本tim1貌似是单独一组库函数,新版本都合一起了,中断通道的名称命名方式也有区别

使用特权

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

本版积分规则

0

主题

20

帖子

0

粉丝