原创 STM32通用定时器的基本定时器功能实现灯闪烁

2009-7-28 17:11 4738 10 14 分类: MCU/ 嵌入式

/*MAIN.C*/


/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
#include "misc.h"


 


/* Private function prototypes -----------------------------*/
void RCC_Configuration(void);
void NVIC_Configuration(void);
void GPIO_Configuration(void);
void TIM3_Configuration(void);


/* Private functions ------------------------------------------*/


/**
  * @brief  Main program
  * @param  None
  * @retval : None
  */

int main(void)
{
 RCC_Configuration();
 NVIC_Configuration();
 GPIO_Configuration();
 TIM3_Configuration();



 while (1) {
  ;
 }
}
/**
  * @brief  Configures TIM3
  * @param  None
  * @retval : None
  */
void TIM3_Configuration(void)
{


/*每1秒发生一次更新事件(进入中断服务程序)。RCC_Configuration()的SystemInit()的RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2表明TIM3CLK为72MHz。因此,每次进入中断服务程序间隔时间为((1+TIM_Prescaler )/72M)*(1+TIM_Period )=((1+7199)/72M)*(1+9999)=1秒 */



 TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
 TIM_TimeBaseStructure.TIM_Period = 7199; 
 TIM_TimeBaseStructure.TIM_Prescaler = 9999;
 TIM_TimeBaseStructure.TIM_ClockDivision = 0;
 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);/*此函数的语句"TIMx->EGR = TIM_PSCReloadMode_Immediate;"以软件方式产生更新事件(注:当发生一个更新事件时,所有的寄存器都被更新,硬件同时(依据URS位)设置更新标志位(TIMx_SR寄存器中的UIF位)。)。*/


 


TIM_ClearFlag(TIM3, TIM_FLAG_Update);/*清除更新标志位*/
 TIM_ARRPreloadConfig(TIM3, DISABLE);/*预装载寄存器的内容被立即传送到影子寄存器 */


 TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);    
 TIM_Cmd(TIM3, ENABLE);

}

/**
  * @brief  Configures the different system clocks.
  * @param  None
  * @retval : None
  */

void RCC_Configuration(void)
{
 SystemInit();
  
 /* TIM3 clock enable */
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
 
 /* GPIOC clock enable */
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

}
/**
  * @brief  Configures NVIC.
  * @param  None
  * @retval : None
*/

void NVIC_Configuration(void)
{
 NVIC_InitTypeDef NVIC_InitStructure;
 
 /* Enable the TIM3 gloabal Interrupt*/
 NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; 
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
 NVIC_Init(&NVIC_InitStructure);
}
/**
  * @brief  Configure the TIM3 Ouput Channels.
  * @param  None
  * @retval : None
  */
void GPIO_Configuration(void)
{
 GPIO_InitTypeDef GPIO_InitStructure;
 
 GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_Init(GPIOC, &GPIO_InitStructure);


/*注:不用为实现通用定时器的基本定时器功能配置Pin*/
}


/*stm32f10x_it.c*/


/* Includes -------------------------------------------------*/


#include "stm32f10x_it.h"


 void TIM3_IRQHandler(void)
{
 if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) {
  /* Clear TIM3 update interrupt */
  TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
  GPIO_WriteBit(GPIOC, GPIO_Pin_7, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_7)));
 }
}


/*注:stm32f10x_stdperiph_lib_v3.0.0  编译器:MDK3.24A*/


 


/*软件仿真:首次进入中断Sec为1.00016507,第二次进入中断Sec为2.00016507,因此2.00016507-1.00016507=1*/


/*


107fbf15-ea95-4256-a7fb-c5ef26349cae.gif*/

PARTNER CONTENT

文章评论4条评论)

登录后参与讨论

用户340315 2011-6-8 10:01

我想用STM32F103ZET6芯片做一秒的定时器,能不能给我发一个啊,632866492@qq.com 谢谢

用户1584993 2009-7-7 10:03

呵呵,加油啊

tengjingshu_112148725 2009-7-6 23:42

上市公司!

用户193558 2009-6-30 16:14

我的邮箱:airanson@126.com 谢谢了

用户193558 2009-6-30 16:12

你好,我想请教一下SystemInit();函数里面的设置。

tengjingshu_112148725 2009-6-18 14:15

我也试试
相关推荐阅读
用户187751 2009-12-02 11:47
MCS_51中断优先级与中断响应时间
...
用户187751 2009-12-01 11:45
Keil的关键字using与寄存器组的切换
...
用户187751 2009-11-29 01:15
KEIL编译器如何分配内存与keil版本差异
...
用户187751 2009-11-28 12:20
浅析C8051F040的EMI0CN寄存器与On-chip XRAM与Keil
...
用户187751 2009-11-28 12:04
在堆上分配内存[转]
[编程修养]的第8条:可能许多人对内存分配上的“栈 stack”和“堆 heap”还不是很明白。包括一些科班出身的人也不明白这两个概念。我不想过多的说这两个东西。简单的来讲,stack 上分配的内存系...
用户187751 2009-11-28 11:26
KEIL C51可重入函数及模拟栈浅析[转]
摘要:本文较详细的介绍了keilc51可再入函数和模拟堆栈的一些概念和实现原理,通过一个简单的程序来剖析keilc51在大存储模式下可重入函数的调用过程,希望能为keilc51和在51系列单片机上移植...
我要评论
4
10
关闭 站长推荐上一条 /3 下一条