原创 STM32 TIM3初始化函数,非使用STM32库方式。

2008-8-26 15:17 5870 8 9 分类: MCU/ 嵌入式

//=========================================================================
// TIM_Configuration(void)
//      设置TIMER-2定时器 为计数溢出中断,1毫秒中断一次
// TIM2、3、4的时钟源是 APB1 即是 PCLK1  ( APB1 对应 PCLK1 )
// PCLK1 = APB1 = HCLK/2 = SYSCLK/2 = 36MHZ (36,000,000 HZ)
//      结果 自动倍频器*2;还原为72MHZ!!!!
//=========================================================================


void TIM_Configuration(void)
{
 TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
 //TIM_OCInitTypeDef  TIM_OCInitStructure ;
   //TIM_DeInit( TIM3);//复位TIM3定时器   
   STM32_Rcc_Regs->apb1rstr.all |=  RCC_TIM3RST;
   STM32_Rcc_Regs->apb1rstr.all &= ~RCC_TIM3RST;
         
   /* TIM3 configuration */
   //TIM_TimeBaseStructure.TIM_Period = 1000;      //  定时1毫秒
   //TIM_TimeBaseStructure.TIM_Prescaler = 72;     //  72分频
   //TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; // 时钟分割 
   //TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //计数方向向上计数
   //TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);


 STM32_Tim3_Regs->arr.all=1000;  //  定时1毫秒
 STM32_Tim3_Regs->psc.all=72; //  72分频
 STM32_Tim3_Regs->cr1.bit.CKD=0; //  时钟分频因子
 STM32_Tim3_Regs->cr1.bit.DIR=0; //  0:计数器向上计数


   /* Clear TIM2 update pending flag[清除TIM2溢出中断标志] */
   //TIM_ClearFlag(TIM2, TIM_FLAG_Update);
 STM32_Tim3_Regs->sr.bit.UIF=0; // 更新中断标记 由软件清0 ,例如当上溢或下溢时,软件对CNT重新初始化
       
   /* TIM2 enable counter [允许tim3计数]*/
   //TIM_Cmd(TIM3, ENABLE);
   STM32_Tim3_Regs->cr1.bit.CEN=1;// 开启计数器
   
   /* Immediate load of TIM3 Precaler value */
   STM32_Tim3_Regs->egr.bit.UG=1;//1:重初始化计数器,并产生一个更新事件。注意预分频器的计数器也被清0
   
   STM32_Tim3_Regs->sr.bit.UIF=0;// 更新中断标记 由软件清0 ,例如当上溢或下溢时,软件对CNT重新初始化
 
   /* Enable TIM3 Update interrupt [TIM2溢出中断允许]*/
   //TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); 
   STM32_Tim3_Regs->dier.bit.UIE=1;// UIE:允许更新中断 1:允许更新中断


   
}



//=====================================//


 //在 stm32f10x_it.c内的中断函数
// STM32的外设中断 要 软件来清零。
//
// STM32的外设中断 要 软件来清零。



void TIM3_IRQHandler(void)
{
//  if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)//((u16)0x0001)
    if (STM32_Tim3_Regs->sr.bit.UIF && STM32_Tim3_Regs->dier.bit.UIE)
  {
        //TIM_ClearITPendingBit(TIM3, TIM_IT_Update);  //((u16)0x0001)
        STM32_Tim3_Regs->sr.bit.UIF=0;//更新中断标记 由软件清0 ,例如当上溢或下溢时,软件对CNT重新初始化


      if(++myclock.nSec>=500) //500 ms
    {
       myclock.nSec=0;
          CPLBIT( myclock.flag,F_nSec);
    }
 if(CHECKBIT(myclock.flag,F_nSec)){
         // GPIO_ResetBits(GPIOC, GPIO_Pin_4); //关LED4
          STM32_Gpioc_Regs->bsrr.bit.BR4 =1;// 1:清除对应的ODRy位为0
        }
        else {
          //GPIO_SetBits(GPIOC, GPIO_Pin_4);   //开LED4
          STM32_Gpioc_Regs->bsrr.bit.BS4 =1;// 1:设置对应的ODRy位为1
        }
  }


}//END SUB


文章评论1条评论)

登录后参与讨论

用户1311798 2011-1-17 17:36

TIM3的时钟最大频率不是36MHz么?

用户31586 2007-3-22 09:54

谢了

用户70771 2006-12-31 16:35

好书。感谢分享
相关推荐阅读
用户479664 2009-12-30 17:07
CRC校验之 MSP430与STM32通吃版
CRC是一个必备工具。在工程上,特别是通信。好比网卡芯片,无效RF CC500 CC1100等芯片内部都有CRC电路。...
用户479664 2009-09-01 17:59
TMS320F280X SPI SPIA使用入门与总结
TMS320F280X SPI SPIA使用入门与总结Netjob @ 2009年 8月31日晚我使用过NXP ARM LPC2138的SPI口,ATMEL AT91SAM7S256的SPI,MSP4...
用户479664 2009-08-25 23:09
STM32 CAN 标称位时间计算
以知 CAN总线 每秒发送的位数,即 最大传输 比特率是 1Mb/s( 1 兆位每秒)这样 CAN总线的【最小标称位时间】就是  1 μs,简单的说就是 发送 1 位要1 μs时间。根据ISO1189...
用户479664 2009-08-25 23:07
精解 SPI 的 CPHA 时钟相位 与CPLK 时钟极性
精解 SPI 的 CPHA 时钟相位 与CPLK 时钟极性Netjob @ 2009-08-01...
用户479664 2009-06-18 23:00
STM32 Hello World!
https://static.assets-stash.eet-china.com/album/old-resources/2008/12/12/8ee2aa15-a51b-441d-96f5-a15...
用户479664 2009-05-11 23:56
精解 Solder Mask 和Paste Mask 区别
Solder Mask Layers【阻焊层】。这个是反显层! 有的表示无的,无的表示有的嘛,不明白?你在Solder Mask Layer【有TopSolder 和BottomSolder】上FIL...
我要评论
1
8
关闭 站长推荐上一条 /2 下一条