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

TIM4定时器库实例

[复制链接]
wyzamazon 提问时间:2011-7-28 10:48 /
/**
  ******************************************************************************
  * @file    TIM4/TIM4_TimeBase/main.c
  * @author  MCD Application Team
  * @version V1.5.0
  * @date    13-May-2011
  * @brief   Main program body
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * © COPYRIGHT 2011 STMicroelectronics


  ******************************************************************************
  */
/* Includes ------------------------------------------------------------------*/
#include "stm8l15x.h"
#include "stm8_eval.h"
#define TIM4_PERIOD       124
__IO uint32_t TimingDelay;
/* Private function prototypes -----------------------------------------------*/
static void CLK_Config(void);
static void TIM4_Config(void);
void Delay(__IO uint32_t nTime);
void TimingDelay_Decrement(void);
void main(void)
{
   /* CLK configuration -------------------------------------------*/
  CLK_Config();
  /* Initialize Leds mounted on STM8L1526-EVAL board */
  STM_EVAL_LEDInit(LED1);
  STM_EVAL_LEDInit(LED2);
  STM_EVAL_LEDInit(LED3);
  STM_EVAL_LEDInit(LED4);
  /* Turn on LED1 and LED3 */
  STM_EVAL_LEDOn(LED1);
  STM_EVAL_LEDOn(LED3);
   /* TIM4 configuration -------------------------------------------*/
  TIM4_Config();
 
  while (1)
  {
    /* Toggle LED2 and LED4 */
    STM_EVAL_LEDToggle(LED2);
    STM_EVAL_LEDToggle(LED4);
    /* Insert 50 ms delay */
    Delay(50);
    /* Toggle LED1 and LED3 */
    STM_EVAL_LEDToggle(LED1);
    STM_EVAL_LEDToggle(LED3);
    /* Insert 100 ms delay */
    Delay(100);
  }
}
static void CLK_Config(void)
{
 
  CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);
  CLK_SYSCLKSourceSwitchCmd(ENABLE);
  CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSE);
  while (CLK_GetSYSCLKSource() != CLK_SYSCLKSource_HSE)
  {}
  CLK_PeripheralClockConfig(CLK_Peripheral_TIM4, ENABLE);
}
static void TIM4_Config(void)
{
  /
  /* Time base configuration */
  TIM4_TimeBaseInit(TIM4_Prescaler_128, TIM4_PERIOD);
  /* Clear TIM4 update flag */
  TIM4_ClearFlag(TIM4_FLAG_Update);
  /* Enable update interrupt */
  TIM4_ITConfig(TIM4_IT_Update, ENABLE);
  /* enable interrupts */
  enableInterrupts();
  /* Enable TIM4 */
  TIM4_Cmd(ENABLE);
}
void Delay(__IO uint32_t nTime)
{
  TimingDelay = nTime;
  while (TimingDelay != 0);
}

void TimingDelay_Decrement(void)
{
  if (TimingDelay != 0x00)
  {
    TimingDelay--;
  }
}

这个函数干什么用的 ?
收藏 评论6 发布时间:2011-7-28 10:48

举报

6个回答
hui235 回答时间:2011-7-28 12:48:48

RE:TIM4定时器库实例

在TIME的中断例程里每一毫秒调用一次TimingDelay_Decrement()
就可以达到delay的目的,
wyzamazon 回答时间:2011-7-28 12:57:37

回复:TIM4定时器库实例

这个函数原型在那啊 谢谢
wyzamazon 回答时间:2011-7-28 12:57:37

回复:TIM4定时器库实例

这个函数原型在那啊 谢谢
hui235 回答时间:2011-7-28 13:44:54

RE:TIM4定时器库实例

你指的原型是什么意思?
你贴出来的代码既有声明,也有定义啊。?
TimingDelay_Decrement(void)的作用很简单,如果全局变量TimingDelay的值不为0,就减一,
而在Delay()里面是去判断TimingDelay 是不是等于0 ,等于0就结束等待,
所以你用delay的时候,比如delay(50),TimingDelay 的值被初始化为50,肯定是没一毫秒调用一次TimingDelay_Decrement(void)起做TimingDelay的自减,直到0为止结束的delay,不知道你清楚了没?
你可以去看看你的中断例程。。。
废鱼 回答时间:2011-7-28 15:06:36

RE:TIM4定时器库实例

下面的代码是用来做延时中断的。这样能够将延时更精确。要比for(;;)的精度高,而且也不用计算延时的时间。
void TimingDelay_Decrement(void)
{
  if (TimingDelay != 0x00)
  {
    TimingDelay--;
  }
}
wyzamazon 回答时间:2011-7-28 15:22:00

RE:TIM4定时器库实例

清楚了  谢了

所属标签

相似问题

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