我想让定时器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 编辑 ]
此帖出自
小平头技术问答
STM32中有多达8个定时器,其中TIM1和TIM8是能够产生三对PWM互补输出的高级定时器,常用于三相电机的驱动,它们的时钟由APB2的输出产生。其它6个为普通定时器,时钟由APB1的输出产生。
下图是STM32参考手册上时钟分配图中,有关定时器时钟部分的截图:
从图中可以看出,定时器的时钟不是直接来自APB1或APB2,而是来自于输入为APB1或APB2的一个倍频器,图中的蓝 {MOD}部分。
下面以定时器2~7的时钟说明这个倍频器的作用:当APB1的预分频系数为1时,这个倍频器不起作用,定时器的时钟频率等于APB1的频率;当APB1的预分频系数为其它数值(即预分频系数为2、4、8或16)时,这个倍频器起作用,定时器的时钟频率等于APB1的频率两倍。
假定AHB=36MHz,因为APB1允许的最大频率为36MHz,所以APB1的预分频系数可以取任意数值;当预分频系数=1时,APB1=36MHz,TIM2~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的时钟频率。能够使用更高的时钟频率,无疑提高了定时器的分辨率,这也正是设计这个倍频器的初衷。
一周热门 更多>