你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F407定时器定时时间问题

[复制链接]
taoshengyijiu-3 提问时间:2015-9-23 16:25 /
使用STM32F407的TIM2定时器,使用内部时钟APB1,不分频(晶振25MHz),AHB也不分频,SYSCLK为25MHz,故APB1的时钟为25MHz,作为CK_INT,
由于禁止从模式,所以CK_PSC=CK_INT,设置PSC预分频器为24999,即分频25000,得到的CK_CNT为1KHz,设置技术CNT及自动重载寄存器为1000,向下递减模式,按理说应该1s产生一次中断,但实际上是2s产生一次中断。很郁闷啊……
  1. #include<stm32f4xx.h>
  2. /*
  3.   定时器中断
  4.   SYSCLK:HSE---25MHz
  5.   PE2:output
  6. */
  7. int flag=0;
  8. /*
  9.   configuration system clock
  10.   SYSCLK---HSE---25MHz
  11.   AHB not divided     APB1 AND APB2 not divided
  12.   AHB:25MHz    APB1:25MHz
  13. */
  14. void config_clock()
  15. {
  16.   RCC->CR |= RCC_CR_HSEON;                                      //HSE oscillator ON
  17.   while((RCC->CR & RCC_CR_HSERDY) != RCC_CR_HSERDY)             //HSE oscillator ready
  18.     ;
  19.   RCC->CFGR &= ~RCC_CFGR_PPRE1;                                 //reset PPRE1(APB1 PRESC)
  20.   RCC->CFGR |= RCC_CFGR_PPRE1_DIV1;                             //HCLK not divided
  21.   RCC->CFGR &= ~RCC_CFGR_SW;                                    //reset SW register
  22.   RCC->CFGR |= RCC_CFGR_SW_0;                                   //select HSE as SYSCLK
  23.   
  24.   RCC->APB1RSTR |= RCC_APB1RSTR_TIM2RST;                        //reset TIM2
  25.   RCC->APB1RSTR &= ~RCC_APB1RSTR_TIM2RST;                       //don't reset TIM2
  26.   RCC->AHB1RSTR |= RCC_AHB1RSTR_GPIOERST;                       //reset GPIOE
  27.   RCC->AHB1RSTR &=~RCC_AHB1RSTR_GPIOERST;                       //don't reset GPIOE
  28.   RCC->AHB1RSTR |= RCC_AHB1RSTR_GPIOCRST;                       //reset GPIOC
  29.   RCC->AHB1RSTR &= ~RCC_AHB1RSTR_GPIOCRST;                      //don't reset GPIOC
  30.   
  31.   RCC->AHB1ENR |= RCC_AHB1ENR_GPIOEEN;                          //enable GPIOE clock
  32.   RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;                           //enable TIM2 clock
  33.   
  34. }

  35. /*
  36.   configuration GPIOs
  37.   PE2 as output
  38. */
  39. void config_GPIOs()
  40. {
  41.   GPIOE->ODR |= GPIO_ODR_ODR_2;                                 //set output data register 1
  42.   GPIOE->MODER |= GPIO_MODER_MODER2_0;                          //set PE2 as output mode
  43. }

  44. /*
  45.   configuration TIM2
  46. */
  47. void config_TIM2()
  48. {
  49.   TIM2->CR1 &= ~TIM_CR1_ARPE;                               //TIM2_ARR register is buffered
  50.   TIM2->CR1 &= ~TIM_CR1_CMS;                               //Edge-aligned mode
  51.   TIM2->CR1 |= TIM_CR1_DIR;                                //counter used as downcounter
  52.   TIM2->CR1 |= TIM_CR1_URS;                                //only counter overflow/underflow-->interrupt/DMA request
  53.   //TIM2->CR1 &= ~TIM_CR1_UDIS;                              //enable update
  54.   
  55.   TIM2->SMCR &= ~TIM_SMCR_SMS;                             //slave mode disabled use internal clock
  56.   
  57.   TIM2->CNT = 500;
  58.   TIM2->PSC = 24999;                                       //Prescaler value(CK_CNT:0.5KHz)
  59.   TIM2->ARR = 500;                                         //auto-reload register
  60.   
  61.   TIM2->EGR |= TIM_EGR_UG;
  62.   
  63.   TIM2->SR &= ~TIM_SR_UIF;
  64.   TIM2->DIER |= TIM_DIER_UIE;                              //Update interrupt enable
  65.   
  66.   TIM2->CR1 |= TIM_CR1_CEN;                               //counter enable
  67. }



  68. void main()
  69. {
  70.   config_clock();
  71.   config_GPIOs();
  72.   NVIC_EnableIRQ(TIM2_IRQn);
  73.   NVIC_SetPriority(TIM2_IRQn,5);
  74.   config_TIM2();
  75.   while(1)
  76.   {
  77.   }
  78. }


  79. void TIM2_IRQHandler()
  80. {
  81.   TIM2->SR &= ~TIM_SR_UIF;                              //clear interrupt flag
  82.   if(flag)
  83.   {
  84.     GPIOE->ODR &= ~GPIO_ODR_ODR_2;
  85.     flag=0;
  86.   }
  87.   else
  88.   {
  89.     GPIOE->ODR |= GPIO_ODR_ODR_2;
  90.     flag=1;
  91.   }
  92. }
复制代码

收藏 评论2 发布时间:2015-9-23 16:25

举报

2个回答
taoshengyijiu-3 回答时间:2015-9-23 16:26:29
TIM2->ARR = 500;
这里改成500就会产生1s的中断,即LED每隔1s亮一下
taoshengyijiu-3 回答时间:2015-9-24 10:29:40
没有人用寄存器写遇到这样的问题吗

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版