| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- /**
- ******************************** STM32F10x *********************************
- * @文件名 : timer.c
- * @作者 : sun
- * @库版本 : V3.5.0
- * @文件版本 : V1.0.0
- * @日期 : 2016年05月09日
- * @摘要 : 定时器源文件
- ******************************************************************************/
- /*----------------------------------------------------------------------------
- 更新日志:
- 2016-05-09 V1.0.0:初始版本
- ----------------------------------------------------------------------------*/
- /* 包含的头文件 --------------------------------------------------------------*/
- #include "timer.h"
- #include "led.h"
- int TimeCount,TimeFlag;
- void Tim3_init(int Period, int Prescaler)
- {
- TIM_TimeBaseInitTypeDef TimeBaseInitValue;
- NVIC_InitTypeDef NVIC_InitValue;
-
-
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
-
- /*
- 时钟计算:
- TIM2在APB1总线,APB1总线的时钟是72M/4=18MHz
- 定时器的时钟是总线时钟的2倍(参考代码得知)
- 定时器计数时钟=36M/3600=10000hz
- 计数是10000,则定时时间为1s
- */
- TimeBaseInitValue.TIM_ClockDivision = TIM_CKD_DIV1;
- TimeBaseInitValue.TIM_CounterMode = TIM_CounterMode_Up;
- TimeBaseInitValue.TIM_Period = Period; //计数
- TimeBaseInitValue.TIM_Prescaler = Prescaler; //分频系数
- TIM_TimeBaseInit(TIM3, &TimeBaseInitValue);
-
- TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
-
- NVIC_InitValue.NVIC_IRQChannel = TIM3_IRQn;
- NVIC_InitValue.NVIC_IRQChannelCmd = ENABLE;
- NVIC_InitValue.NVIC_IRQChannelPreemptionPriority = 1;
- NVIC_InitValue.NVIC_IRQChannelSubPriority = 1;
- NVIC_Init(&NVIC_InitValue);
-
- TIM_Cmd(TIM3, ENABLE);
- }
- void TIM3_IRQHandler(void)
- {
- static int count = 0;
- if (TIM_GetITStatus(TIM3, TIM_IT_Update) == SET) {
- count++;
- if(count >= 2)
- {
- count = 0;
- LED_RUN = !LED_RUN;
- }
- // IWDG_Feed();
- TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
- }
- }
- /************************************************
- 函数名称 : TIMER_Initializes
- 功 能 : TIMER初始化
- 参 数 : 无
- 返 回 值 : 无
- 作 者 : sun
- *************************************************/
- void TIMER_Initializes(void)
- {
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
- /* TIM4时基单元配置 */
- TIM_TimeBaseStructure.TIM_Prescaler = TIM4_PRESCALER_VALUE; //预分频值
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式
- TIM_TimeBaseStructure.TIM_Period = TIM4_PERIOD_TIMING; //定时周期(自动从装载寄存器ARR的值)
- TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //时钟分频因子
- TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
- /* 使能预分频值 */
- TIM_ARRPreloadConfig(TIM4, ENABLE); //使能重载值TIM4_PRESCALER_VALUE
- }
- /************************************************
- 函数名称 : TIMDelay_N10us
- 功 能 : 定时器延时N个10us
- 参 数 : Times --- N值
- 返 回 值 : 无
- 作 者 : sun
- *************************************************/
- void TIMDelay_N10us(uint16_t Times)
- {
- TIM4->CR1 |= TIM_CR1_CEN; //启动定时器
- while(Times--)
- {
- while((TIM4->SR & TIM_FLAG_Update) == RESET);
- TIM4->SR &= ~TIM_FLAG_Update; //清除标志
- }
- TIM4->CR1 &= ~TIM_CR1_CEN; //关闭定时器
- }
- /************************************************
- 函数名称 : TIMDelay_Nms
- 功 能 : 定时器延时Nms
- 参 数 : Times --- N值
- 返 回 值 : 无
- 作 者 : sun
- *************************************************/
- void TIMDelay_Nms(uint16_t Times)
- {
- while(Times--)
- {
- TIMDelay_N10us(10);
- }
- }
- /**** Copyright (C)2016 sun. All Rights Reserved **** END OF FILE ****/
|