10343|2

12

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

关于定时器的分频问题 求助 [复制链接]

我想让定时器tim2实现1s一次中断 但是不知道为什么代码下载到板子上发现非常快 检查了时钟tim2的时钟频率是72M 那么预分频系数设定为36000  重装载为2000 但是不管用
代码如下:

#include "stm32f10x.h"
void ttttt(void);
void GPIO_Configuration(void);
void delay(u32 t);
        int i=0;
int main()
{

   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD,ENABLE);//GPIO时钟开启,A0控制B1按键,PD控制锁存器,PC控制数码管
   GPIO_Configuration();
   RCC->APB1ENR=(RCC->APB1ENR&0xfffffffe)|0x1;
   GPIOC->BSRR=0xff00;//关闭所有led
   GPIO_SetBits(GPIOD,GPIO_Pin_2);
   GPIO_ResetBits(GPIOD,GPIO_Pin_2);
   

   NVIC->ISER[0]=0x10000000;
   TIM2->DIER=0x41;//使能timer中断
   TIM2->PSC=0x8ca0;//36000分频
   TIM2->ARR=0x7d0;//到2000
   TIM2->CR1=0x15;
   
   while(1)
   {

     ;
         
        }  

}

void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;                //定义一个结构体名称为GPIO_InitStructure
  //LED
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11         \
                                |GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
  GPIO_Init(GPIOC, &GPIO_InitStructure);
  //NLE
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
}

void delay(u32 t)
{
  for(;t>0;t--);
}

void TIM2_IRQHandler(void)
{
          GPIO_Write(GPIOC,~(1<<(i+8)));
          GPIO_SetBits(GPIOD,GPIO_Pin_2);
          GPIO_ResetBits(GPIOD,GPIO_Pin_2);
         // delay(500000);
          i++ ;
          if(i==8)
          {
                  i=0;
          }
}

Clock Enabled, TIM2CLK: 72.00 MHz 这句话是不是就是说tim2的时钟频率是72mhz啊??
请大家帮忙看看
我后来改成tim3 也不行啊 为什么啊???

[ 本帖最后由 cyhssw12 于 2011-7-29 12:00 编辑 ]

tim3.JPG (107.75 KB, 下载次数: 2)

TIM3的寄存器图

TIM3的寄存器图
此帖出自stm32/stm8论坛

最新回复

实在没找到你说的TIM2 CLK,但是看程序来说是没有错的,问题应该不在你贴出来的这段程序里  详情 回复 发表于 2011-8-4 14:24
点赞 关注
 

回复
举报

2131

帖子

0

TA的资源

至上芯片

沙发
 

STM32中有多达8个定时器,其中TIM1TIM8是能够产生三对PWM互补输出的高级定时器,常用于三相电机的驱动,它们的时钟由APB2的输出产生。其它6个为普通定时器,时钟由APB1的输出产生。

下图是STM32参考手册上时钟分配图中,有关定时器时钟部分的截图:


从图中可以看出,定时器的时钟不是直接来自APB1APB2,而是来自于输入为APB1APB2的一个倍频器,图中的蓝色部分。

下面以定时器2~7的时钟说明这个倍频器的作用:当APB1的预分频系数为1时,这个倍频器不起作用,定时器的时钟频率等于APB1的频率;当APB1的预分频系数为其它数值(即预分频系数为24816)时,这个倍频器起作用,定时器的时钟频率等于APB1的频率两倍。

假定AHB=36MHz,因为APB1允许的最大频率为36MHz,所以APB1的预分频系数可以取任意数值;当预分频系数=1时,APB1=36MHzTIM2~7的时钟频率=36MHz(倍频器不起作用);当预分频系数=2时,APB1=18MHz,在倍频器的作用下,TIM2~7的时钟频率=36MHz

有人会问,既然需要TIM2~7的时钟频率=36MHz,为什么不直接取APB1的预分频系数=1?答案是:APB1不但要为TIM2~7提供时钟,而且还要为其它外设提供时钟;设置这个倍频器可以在保证其它外设使用较低时钟频率时,TIM2~7仍能得到较高的时钟频率。

再举个例子:当AHB=72MHz时,APB1的预分频系数必须大于2,因为APB1的最大频率只能为36MHz。如果APB1的预分频系数=2,则因为这个倍频器,TIM2~7仍然能够得到72MHz的时钟频率。能够使用更高的时钟频率,无疑提高了定时器的分辨率,这也正是设计这个倍频器的初衷。

此帖出自stm32/stm8论坛
 
个人签名处处留心皆学问!
 

回复

17

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

实在没找到你说的TIM2 CLK

实在没找到你说的TIM2 CLK,但是看程序来说是没有错的,问题应该不在你贴出来的这段程序里
此帖出自stm32/stm8论坛
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表