你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F单纯的TIM2定时器溢出中断试验程序

[复制链接]
endlesswind 发布时间:2008-9-3 20:04
STM32F定时器的功能非常丰富,像我这样单纯的TIM2定时器溢出中断人恐怕不多了,所以找例子资料也找不到费了九牛二虎之力终于杜撰出来了,发帖庆祝!我这里用了ST新版的STM32F FWLIB2.0库,用到的函数都添加了中文注释。

/* Includes ------------------------------------------------------------------*/
#include "stm32f10x_lib.h"

ErrorStatus HSEStartUpStatus;

void RCC_Configuration(void);
void GPIO_Configuration(void);
void NVIC_Configuration(void);
void TIM_Configuration(void);
void delay(void);



/*******************************************************************************
* Function Name  : main
* Description    : Main program
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
int main(void)
{

#ifdef DEBUG
  debug();/*[初始化外围设备指针]*/
#endif
  GPIO_Configuration();//初始化io口
  NVIC_Configuration();//初始化中断嵌套
  RCC_Configuration(); //初始化时钟与复位
  TIM_Configuration();//初始化定时器

  while(1)
  {

      delay();
  }
}

/*******************************************************************************
* Function Name  : RCC_Configuration
* Description    : Configures the different system clocks.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void RCC_Configuration(void)
{
  /* RCC system reset(for debug purpose)[复位RCC外围设备寄存器到默认复位值] */
  RCC_DeInit();

  /* Enable HSE [HSE振荡器开启]*/
  RCC_HSEConfig(RCC_HSE_ON);

  /* Wait till HSE is ready [等待HSE启动]*/
  HSEStartUpStatus = RCC_WaitForHSEStartUp();

  if(HSEStartUpStatus == SUCCESS)
  {
    /* Enable Prefetch Buffer [预取缓冲区允许]*/
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

    /* Flash 2 wait state[代码2个延时周期] */
    FLASH_SetLatency(FLASH_Latency_2);

    /* HCLK = SYSCLK [AHB时钟等于SYSCLK]*/
    RCC_HCLKConfig(RCC_SYSCLK_Div1);
  
    /* PCLK2 = HCLK [APB2时钟等于HCLK]*/
    RCC_PCLK2Config(RCC_HCLK_Div1);

    /* PCLK1 = HCLK/2 [低速APB1时钟等于HCLK/2]*/
    RCC_PCLK1Config(RCC_HCLK_Div2);

    /* PLLCLK = 8MHz * 9 = 72 MHz [配置PLL时钟源和乘法因子][PLL时钟输入等于HSE时钟][PLL乘法因子取值9]*/
    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

    /* Enable PLL [允许PLL]*/
    RCC_PLLCmd(ENABLE);

    /* Wait till PLL is ready [等待PLL时钟就绪]*/
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
    {
    }

    /* Select PLL as system clock source [选择PLL作为系统时钟]*/
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

    /* Wait till PLL is used as system clock source[等待PLL被作为系统时钟] */
    while(RCC_GetSYSCLKSource() != 0x08)
    {
    }
  }
    /* TIM2 clock enable [TIM2定时器允许]*/
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);  
                     

}

/*******************************************************************************
* Function Name  : GPIO_Configuration
* Description    : LED输出配置
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  /* Enable GPIOC clock [使能GPIOC时钟]*/
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

  /* Configure PC.04, PC.05, PC.06 and PC.07 as output push-pull[把PC4、PC5、PC6、PC7配置成输出模式] */
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_4 | GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//GPIO最高速度50MHz
  GPIO_Init(GPIOC, &GPIO_InitStructure);
}

/*******************************************************************************
* Function Name  : NVIC_Configuration
* Description    : Configures the nested vectored interrupt controller.[配置中断向量表的起始位置]
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;

#ifdef  VECT_TAB_RAM  
  /* Set the Vector Table base location at 0x20000000 [设置中断向量表的起始位置0x20000000]*/
  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else  /* VECT_TAB_FLASH  */
  /* Set the Vector Table base location at 0x08000000[设置中断向量表的起始位置0x0x08000000] */
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);   
#endif

  /* Configure the NVIC Preemption Priority Bits[配置优先级组] */  
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
  
  /* Enable the TIM2 gloabal Interrupt [允许TIM2全局中断]*/
  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);
}

/*******************************************************************************
* Function Name  : TIM2_Configuration
* Description    :
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void TIM_Configuration(void)
{
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
//  TIM_OCInitTypeDef  TIM_OCInitStructure ;
  TIM_DeInit( TIM2);//复位TIM2定时器

  /* TIM2 configuration */
  TIM_TimeBaseStructure.TIM_Period = 0xffff; //最大计数值0xffff      
  TIM_TimeBaseStructure.TIM_Prescaler = 0x36;//分频0x36      
  TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; // 时钟分割  
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //计数方向向上计数
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

  
  /* Clear TIM2 update pending flag[清除TIM2溢出中断标志] */
  TIM_ClearFlag(TIM2, TIM_FLAG_Update);


  /* Enable TIM2 Update interrupt [TIM2溢出中断允许]*/
  TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);  

  /* TIM2 enable counter [允许tim2计数]*/
  TIM_Cmd(TIM2, ENABLE);
}


/*******************************************************************************
* Function Name  : delay
* Description    : 延时
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void delay(void)
{
  u32 i,j;
  for (i=0; i
收藏 评论2 发布时间:2008-9-3 20:04

举报

2个回答
oktigerxia 回答时间:2009-4-16 16:48:13

RE:STM32F单纯的TIM2定时器溢出中断试验程序

你中断处理程序是什么啊?也贴出借鉴一下
qianzh10 回答时间:2012-2-2 15:42:50

RE:STM32F单纯的TIM2定时器溢出中断试验程序

谢谢,正需要定时器的代码

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版