专栏中心

EEPW首页 > 专栏 > STM32通用定时器的基本定时器功能实现灯闪烁

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

发布人:0750long 时间:2009-06-18 来源:工程师 发布文章
STM32通用定时器的基本定时器功能实现灯闪烁

 

/*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();

 

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

 TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);    
 TIM_Cmd(TIM3, ENABLE);
 
 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位)。)。*/
}
/**
  * @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*/

/*

*/

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

高通技术公司发布AI200和AI250,重新定义AI时代机架级数据中心推理性能

60℃高温,边缘AI如何稳定输出?答案:全球首款主动散热芯片

从iPhone 17 Air上,谈一谈为何我们手机上的eSIM普及缓慢?

汽车表盘显示和GPS地图显示的动感演示

视频 2012-05-07

“asean”的以太网测试视频

视频 2012-05-04

奇葩芯片关税方案或将重塑万亿半导体市场

以AI驱动商业,Criteo助力中国企业扬帆出海

智能计算 2025-10-29

Universal Vapor Jet Corporation正式启用新加坡全球总部与研发中心

2025-10-29

IDC:IT前沿“早知道”

2025-10-29

“Albertgreenabc”的串口收发数据视频

视频 2012-05-10

“hanshuyujifen2”的按键中断和按键输入视频

视频 2012-05-04

Skyworks与Qorvo合并,将打造市值220亿美元的美国高性能射频、模拟及混合信号解决方案领导者

模拟技术 2025-10-29

思特威推出“暗光之王”超星光级全高清智能安防应用图像传感器

大算力芯片成为自动驾驶玩家新战线

“sacq”的STM32运行uCGUI演示的视频片段1

视频 2012-05-07
更多 培训课堂
更多 焦点
更多 视频

技术专区