原创 STM32----2----定时器基本配置

2011-5-9 09:55 5242 4 5 分类: MCU/ 嵌入式

实验一:TIMER-1:定时器上溢,查询溢出后取反LED.

 

故频率计算:f=(72M/(TIM_Prescaler+1)*(1+TIM_Period)) ;

定时器的基本设置:

1、设置预分频数,得到CK_CNT,

 TIM_TimeBaseStructure.TIM_Prescaler = 7199;

         CK_CNT的计数频率=72M/(7199+1)=10K;

2、设置自动重装载寄存器,当计数值达到这个寄存器锁存数值时,溢出产生事件

 TIM_TimeBaseStructure.TIM_Period = 9999;

         10K/(9999+1)=1HZ ,也就是1S溢出一次;

3、设置计数模式

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 

从0计数到ARR产生溢出事件;

4、 设置时间分割值  

 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ; 

5、 初始化定时器2

 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

6、清楚标志

TIM_ClearFlag(TIM2, TIM_FLAG_Update);

7、打开定时器

 TIM_Cmd(TIM2, ENABLE);

8、在主函数中查询TIM_FLAG_Update标志置位了就清除标志:

 if(TIM_GetFlagStatus (TIM2,TIM_FLAG_Update )!=RESET)

 {

TIM_ClearFlag (TIM2,TIM_FLAG_Update);

if( GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_8)==0)

GPIO_WriteBit(GPIOA,GPIO_Pin_8,Bit_SET); 

else 

GPIO_WriteBit(GPIOA,GPIO_Pin_8,Bit_RESET); 

}

实验二、TIMER-1:定时器上溢,中断溢出后取反LED.

利用中断的方法:

步骤一:定时器的配置

1、设置预分频数,得到CK_CNT,

 TIM_TimeBaseStructure.TIM_Prescaler = 7199;

         CK_CNT的计数频率=72M/(7199+1)=10K;

2、设置自动重装载寄存器,当计数值达到这个寄存器锁存数值时,溢出产生事件

 TIM_TimeBaseStructure.TIM_Period = 9999;

         10K/(9999+1)=1HZ ,也就是1S溢出一次;

3、设置计数模式

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 

从0计数到ARR产生溢出事件;

4、设置时间分割值  

 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ; 

5、 初始化定时器2

 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

6、 打开中断   溢出中断   

  TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);  

7、 打开定时器

TIM_Cmd(TIM2, ENABLE);

步骤二:编写中断配置

void NVIC_Configuration(void)

{

NVIC_InitTypeDef NVIC_InitStructure;

#ifdef  VECT_TAB_RAM  

/* Set the Vector Table base location at 0x20000000 */ 

NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); 

#else  /* VECT_TAB_FLASH  */

/* Set the Vector Table base location at 0x08000000 */ 

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);   

#endif

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1) ;

NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQChannel;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;

NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

NVIC_Init(&NVIC_InitStructure);  

}

注意:加黑的部分,如果你在RAM中编程就要定义VECT_TAB_RAM ,如果在FLASH编程,则需要NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);如果没有这条预编译语句的话,则很可能会存在进不去中断的错误。

步骤三:编写中断服务函数

void TIM2_IRQHandler(void)

{

if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET)

{

  TIM_ClearITPendingBit(TIM2,TIM_IT_Update);

  GPIO_WriteBit(GPIOD,GPIO_Pin_2,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOD,GPIO_Pin_2)));

  GPIO_WriteBit(GPIOA,GPIO_Pin_8,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_8)));

 }

}

进入中断判断是不是TIM_IT_Update置位了,如果是的话,清除标志位,将PA8,PD2控制的LED灯取反。

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户362559 2011-9-16 10:33

你成功了吗??
相关推荐阅读
用户1583361 2011-09-12 09:50
STM32 ----小谈FSMC RS选择
STM32 FMSC  LCD难点解析: 以下是网上和自己整理的:感觉应该可以把STM32 ----FSMC LCD中的关键RS说清楚~ ------------------------------...
用户1583361 2011-09-06 09:57
文件系统
FatFs中文译文 原网络的地址如下,下面是我做的一些中文解释。大家可以到原网站获取更多的信息。 http://elm-chan.org/fsw/ff/00index_e.html   英文原文:F...
用户1583361 2011-05-18 16:08
STM32----10----FAT32文件系统(上)
attachment download这几天好忙,来到了金鸡岭,又去了奇峰镇,不过还好FAT32基本知识看完了~~~其实很简单~~~~由于截图较多,就放在附件了!!!...
用户1583361 2011-05-10 18:18
STM32----9----红外遥控(NEC协议)
2011-5-9     STM32----11----红外遥控--------------------------------------------------------------------...
用户1583361 2011-05-10 15:55
数字信号处理
这个网友写的和我的想法一样~~~~ 《数字信号处理》的基础部分一般可以分为两个部分,第一部分是DFT和FFT ;第二部分是数字滤波器。 第一部分中往往从FS—>FT—>DTFT—>D...
用户1583361 2011-05-09 15:02
STM32----8----SPI(下)与FLASH通信
attachment downloadSTM32----8----SPI(下)与FLASH通信-----------------------------------------------------...
EE直播间
更多
我要评论
1
4
关闭 站长推荐上一条 /3 下一条