OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10869|回复: 7

STM32F407定时器定时时间问题

[复制链接]

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2015-9-23
在线时间
2 小时
发表于 2015-9-23 16:30:56 | 显示全部楼层 |阅读模式
5金钱
使用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产生一次中断。很郁闷啊……
[mw_shl_code=c,true]#include<stm32f4xx.h> /* 定时器中断 SYSCLK:HSE---25MHz PE2utput */ int flag=0; /* configuration system clock SYSCLK---HSE---25MHz AHB not divided APB1 AND APB2 not divided AHB:25MHz APB1:25MHz */ void config_clock() { RCC->CR |= RCC_CR_HSEON; //HSE oscillator ON while((RCC->CR & RCC_CR_HSERDY) != RCC_CR_HSERDY) //HSE oscillator ready ; RCC->CFGR &= ~RCC_CFGR_PPRE1; //reset PPRE1(APB1 PRESC) RCC->CFGR |= RCC_CFGR_PPRE1_DIV1; //HCLK not divided RCC->CFGR &= ~RCC_CFGR_SW; //reset SW register RCC->CFGR |= RCC_CFGR_SW_0; //select HSE as SYSCLK RCC->APB1RSTR |= RCC_APB1RSTR_TIM2RST; //reset TIM2 RCC->APB1RSTR &= ~RCC_APB1RSTR_TIM2RST; //don't reset TIM2 RCC->AHB1RSTR |= RCC_AHB1RSTR_GPIOERST; //reset GPIOE RCC->AHB1RSTR &=~RCC_AHB1RSTR_GPIOERST; //don't reset GPIOE RCC->AHB1RSTR |= RCC_AHB1RSTR_GPIOCRST; //reset GPIOC RCC->AHB1RSTR &= ~RCC_AHB1RSTR_GPIOCRST; //don't reset GPIOC RCC->AHB1ENR |= RCC_AHB1ENR_GPIOEEN; //enable GPIOE clock RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; //enable TIM2 clock } /* configuration GPIOs PE2 as output */ void config_GPIOs() { GPIOE->ODR |= GPIO_ODR_ODR_2; //set output data register 1 GPIOE->MODER |= GPIO_MODER_MODER2_0; //set PE2 as output mode } /* configuration TIM2 */ void config_TIM2() { TIM2->CR1 &= ~TIM_CR1_ARPE; //TIM2_ARR register is buffered TIM2->CR1 &= ~TIM_CR1_CMS; //Edge-aligned mode TIM2->CR1 |= TIM_CR1_DIR; //counter used as downcounter TIM2->CR1 |= TIM_CR1_URS; //only counter overflow/underflow-->interrupt/DMA request //TIM2->CR1 &= ~TIM_CR1_UDIS; //enable update TIM2->SMCR &= ~TIM_SMCR_SMS; //slave mode disabled use internal clock TIM2->CNT = 500; TIM2->SC = 24999; //Prescaler value(CK_CNT:0.5KHz) TIM2->ARR = 500; //auto-reload register TIM2->EGR |= TIM_EGR_UG; TIM2->SR &= ~TIM_SR_UIF; TIM2->DIER |= TIM_DIER_UIE; //Update interrupt enable TIM2->CR1 |= TIM_CR1_CEN; //counter enable } void main() { config_clock(); config_GPIOs(); NVIC_EnableIRQ(TIM2_IRQn); NVIC_SetPriority(TIM2_IRQn,5); config_TIM2(); while(1) { } } void TIM2_IRQHandler() { TIM2->SR &= ~TIM_SR_UIF; //clear interrupt flag if(flag) { GPIOE->ODR &= ~GPIO_ODR_ODR_2; flag=0; } else { GPIOE->ODR |= GPIO_ODR_ODR_2; flag=1; } } [/mw_shl_code]

最佳答案

查看完整内容[请看2#楼]

当APB1和APB2分频数为1的时候,TIM1、TIM8~TIM11的时钟为APB2的时钟,TIM2~TIM7、TIM12~TIM14的时钟为APB1的时钟;而如果APB1和APB2分频数不为1,那么TIM1、TIM8~TIM11的时钟为APB2的时钟的两倍,TIM2~TIM7、TIM12~TIM14的时钟为APB1的时钟的两倍。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
128
金钱
128
注册时间
2016-10-28
在线时间
30 小时
发表于 2015-9-23 16:30:57 | 显示全部楼层
当APB1和APB2分频数为1的时候,TIM1、TIM8~TIM11的时钟为APB2的时钟,TIM2~TIM7、TIM12~TIM14的时钟为APB1的时钟;而如果APB1和APB2分频数不为1,那么TIM1、TIM8~TIM11的时钟为APB2的时钟的两倍,TIM2~TIM7、TIM12~TIM14的时钟为APB1的时钟的两倍。
回复

使用道具 举报

37

主题

88

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2439
金钱
2439
注册时间
2015-1-29
在线时间
142 小时
发表于 2015-9-24 12:47:21 | 显示全部楼层
我也有同样的问题
回复

使用道具 举报

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2015-9-23
在线时间
2 小时
 楼主| 发表于 2015-9-24 15:28:20 | 显示全部楼层
回复【2楼】askh:
---------------------------------
你解决了没
回复

使用道具 举报

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2015-9-23
在线时间
2 小时
 楼主| 发表于 2015-9-24 15:35:00 | 显示全部楼层
回复【2楼】askh:
---------------------------------
感觉是时钟的问题或者内部没有倍频器了(手册给的有问题可能),我找了好久问题所在,都没有发现……
回复

使用道具 举报

37

主题

88

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2439
金钱
2439
注册时间
2015-1-29
在线时间
142 小时
发表于 2015-9-24 17:05:02 | 显示全部楼层
没有解决,问题依旧
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11555
金钱
11555
注册时间
2014-4-1
在线时间
1317 小时
发表于 2015-9-24 17:34:14 | 显示全部楼层


用仿真器,在初始化完成以后,把红圈中的值贴出来。





回复

使用道具 举报

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2015-9-23
在线时间
2 小时
 楼主| 发表于 2015-9-24 18:30:37 | 显示全部楼层



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 05:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表