OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8862|回复: 8

STM8L TIM1定时器使用没反应

[复制链接]

15

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
154
金钱
154
注册时间
2014-11-1
在线时间
2 小时
发表于 2015-3-28 09:19:26 | 显示全部楼层 |阅读模式
5金钱
我这样写的代码,本想是让led交替闪烁的,可是什么效果都没有,麻烦大家看看哪里出问题了
[mw_shl_code=c,true] /*main.c*/ #include "stm8l15x.h" #include "stm8l15x_gpio.h" #include "stm8l15x_tim1.h" #include "stm8l15x_it.h" #include <intrinsics.h> /** * 时钟的配置函数,16分频 */ void CLK_Config(void) { CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_16); //16 分频 CLK_PeripheralClockConfig(CLK_Peripheral_TIM4,ENABLE); //外设时钟定时器4使能 } void GPIO_Config(void) { GPIO_Init(GPIOC,GPIO_Pin_7,GPIO_Mode_Out_PP_High_Slow); GPIO_Init(GPIOE,GPIO_Pin_7,GPIO_Mode_Out_PP_High_Slow); } void TIM1_Config(void) { TIM1_SetCounter(0); //8分频,使用向上计数模式125次,使用晶振1M TIM1_TimeBaseInit(8,TIM1_CounterMode_Up,124,0); /*Enables TIM1 peripheral Preload register on ARR*/ TIM1_ARRPreloadConfig(ENABLE); /*清中断*/ TIM1_ClearFlag(TIM1_FLAG_Update); /*Enables the specified TIM1 interrupts*/ TIM1_ITConfig(TIM1_IT_Update,ENABLE); /*打开总中断*/ __enable_interrupt(); /*Enables the TIM1 peripheral.*/ TIM1_Cmd(ENABLE); } void main(void) { CLK_Config(); GPIO_Config(); TIM1_Config(); // __enable_interrupt(); while(1) { } } /*stm8l15x_it.c*/ INTERRUPT_HANDLER(SWITCH_CSS_BREAK_DAC_IRQHandler,17) { /* In order to detect unexpected events during development, it is recommended to set a breakpoint on the following instruction. */ // while (1); static u16 i,j; i++; if(i==1000) { i=0; j++; if(j%2==1) { LED3_H(); //PE7为高电平,黄灯亮 LED4_L(); //PC7为低电平 } else if(j%2==0) { LED3_L(); LED4_H(); //PC7为高电平,蓝灯亮 } if(j==60000) /*防止溢出*/ { j=0; } } // TIM1_ClearFlag(TIM1_FLAG_Update); /*Clear the TIM1' Pending flags*/ TIM1_ClearITPendingBit(TIM1_IT_Update); /*Clear the TIM1' Pending Bits*/ }[/mw_shl_code]

最佳答案

查看完整内容[请看2#楼]

回复【2楼】正点原子: --------------------------------- 误打误撞解决了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

15

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
154
金钱
154
注册时间
2014-11-1
在线时间
2 小时
 楼主| 发表于 2015-3-28 09:19:27 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
误打误撞解决了
回复

使用道具 举报

557

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165051
金钱
165051
注册时间
2010-12-1
在线时间
2103 小时
发表于 2015-3-28 23:18:09 | 显示全部楼层
帮顶....
回复

使用道具 举报

0

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2015-3-29
在线时间
7 小时
发表于 2015-3-29 20:26:09 | 显示全部楼层
你用的库 是哪个呀  编译环境 是IAR 吗?
回复

使用道具 举报

15

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
154
金钱
154
注册时间
2014-11-1
在线时间
2 小时
 楼主| 发表于 2015-3-30 10:26:32 | 显示全部楼层
回复【3楼】gxbltao:
---------------------------------
编译环境是IAR   stm8l的标准库
回复

使用道具 举报

0

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2015-3-29
在线时间
7 小时
发表于 2015-3-30 17:28:46 | 显示全部楼层
回复【5楼】XXL:
---------------------------------
哦  是什么原因 呢 可以分享下吗
回复

使用道具 举报

0

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2015-3-29
在线时间
7 小时
发表于 2015-3-30 17:29:59 | 显示全部楼层
while(1)
  {

   
  }
 
是不是这里呀
回复

使用道具 举报

15

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
154
金钱
154
注册时间
2014-11-1
在线时间
2 小时
 楼主| 发表于 2015-3-30 20:04:01 | 显示全部楼层
回复【7楼】gxbltao:
---------------------------------
回复【7楼】gxbltao:
---------------------------------不是    是时钟配置有问题   下面这样就可以了

/*时钟的配置*/
static void CLK_Config(void)
{
  /* High speed internal clock prescaler */
  CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);

  /*Enables or disables the clock switch execution*/
  CLK_SYSCLKSourceSwitchCmd(ENABLE);
  
  /*Configures the system clock (SYSCLK)
  * Select HSI as system clock source
  */
  CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSI);

  /*HSI used as system clock 
  * Returns the clock source used as system clock
  */
  while (CLK_GetSYSCLKSource() != CLK_SYSCLKSource_HSI)
  {}

  /* Enable TIM1 CLK */
  CLK_PeripheralClockConfig(CLK_Peripheral_TIM1, ENABLE);
}
回复

使用道具 举报

3

主题

15

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2016-7-6
在线时间
2 小时
发表于 2016-7-6 09:30:33 | 显示全部楼层
用了你的设置我的tim还不启动   唉!  我的是 stm8l051的
static void CLK_Config(void)
{
    /* ------使能 TIM2 时钟外设单元------ */
// CLK_PeripheralClockConfig(CLK_Peripheral_TIM2, ENABLE);
/* High speed internal clock prescaler */
  CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_2);

  /*Enables or disables the clock switch execution*/
  CLK_SYSCLKSourceSwitchCmd(ENABLE);
   
  /*Configures the system clock (SYSCLK)
  * Select HSI as system clock source
  */
  CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSI);

  /*HSI used as system clock  
  * Returns the clock source used as system clock
  */
  while (CLK_GetSYSCLKSource() != CLK_SYSCLKSource_HSI)
  {}

  /* Enable TIM1 CLK */
  CLK_PeripheralClockConfig(CLK_Peripheral_TIM2, ENABLE);
  CLK_PeripheralClockConfig(CLK_Peripheral_TIM1, ENABLE);
}
static void TIM2_Config(void)
{

  /* TIM2 configuration:
     - TIM2 ETR is mapped to LSE
     - TIM2 counter is clocked by LSE div 1
      so the TIM2 counter clock used is LSE / 1 = 32.768KHZ
    TIM2 Channel1 output frequency = TIM2CLK / (TIM2 Prescaler * (8191 + 1))
                                   = 32768 / (8192) = 4 Hz */
  
  TIM2_ETRClockMode1Config(TIM2_ExtTRGPSC_DIV8,//不分频
                           TIM2_ExtTRGPolarity_Inverted,//触发极性
                           0x00); //滤波  低功耗模式下滤波关掉
   
  /* Time Base configuration */
  TIM2_TimeBaseInit(128, TIM2_CounterMode_Up, 8191);

  /* --清除TIM2溢出更新标志位-- */
  TIM2_ClearFlag(TIM2_FLAG_Update);
  /* --使能TIM2溢出更新中断-- */
  TIM2_ITConfig(TIM2_IT_Update, ENABLE);
  
  /* TIM2 counter enable */
  TIM2_Cmd(ENABLE);
}
/**
  * @brief TIM2 Update/Overflow/Trigger/Break Interrupt routine.
  * @par Parameters:
  * None
  * @retval
  * None
  */
INTERRUPT_HANDLER(TIM2_UPD_OVF_TRG_BRK_IRQHandler,19)
{
/* In order to detect unexpected events during development,
   it is recommended to set a breakpoint on the following instruction.
*/
  if(TIM2_GetITStatus(TIM2_IT_Update)==SET)
  {
    TIM2_ClearITPendingBit(TIM2_IT_Update);
    GPIO_ToggleBits(GPIOC, GPIO_Pin_6);
  }

}

求大神看看咋回事
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-7-1 04:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表