打印
[STM8]

求助TIM4配合LSI奇怪的延时

[复制链接]
888|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
henry42|  楼主 | 2019-8-16 15:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
LSI, TI, pi, gp, IO
芯片是stm8s103f3p6,fmaster选取LSI,LSI_EN enable
奇怪的问题,本意是 tim4 1分频,arr 128,那么每次溢出1ms,但是奇怪的是,有时候时间是一倍,有时候程序在enableInterrupts就死掉了,请问是哪儿出错了呢


unsigned long elapseTime = 0;

void DelayMS(unsigned int ms) {
  unsigned long lmttime = elapseTime + ms;
  while(lmttime >= elapseTime);
  return;
}

int main( void )
{
  CLK_DeInit();
  
  CLK_LSICmd(ENABLE);
  CLK_ClockSwitchConfig(CLK_SWITCHMODE_MANUAL, CLK_SOURCE_LSI, DISABLE, CLK_CURRENTCLOCKSTATE_DISABLE);
  while(CLK_GetFlagStatus(CLK_FLAG_LSIRDY)==RESET);
  CLK_ClockSwitchCmd(ENABLE);  
  while(CLK_GetSYSCLKSource() != CLK_SOURCE_LSI){
  }
  
  TIM4_DeInit();
  TIM4_TimeBaseInit(TIM4_PRESCALER_1, 128);
  TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
  TIM4_SetCounter(0x00);
  TIM4_Cmd(ENABLE);
  

  GPIO_DeInit(GPIOB);
  GPIO_Init(GPIOB, GPIO_PIN_5, GPIO_MODE_OUT_OD_LOW_SLOW);
  
  GPIO_WriteReverse(GPIOB, GPIO_PIN_5);
  
  enableInterrupts();
  
  while (1) {
    DelayMS(2000);
    GPIO_WriteReverse(GPIOB, GPIO_PIN_5);
  }
  
  return 0;
}

INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler, 23)
{
   elapseTime++;
   TIM4_ClearITPendingBit(TIM4_IT_UPDATE);
}

使用特权

评论回复
沙发
dongnanxibei| | 2019-8-16 22:25 | 只看该作者
没看明白,你用cubeMX配置试试

使用特权

评论回复
板凳
598330983| | 2019-8-17 09:25 | 只看该作者
这个没有003好用。

使用特权

评论回复
地板
henry42|  楼主 | 2019-8-19 16:04 | 只看该作者
还是没解决,难道是系统资源需要占用很大一部分LSI的频率?

使用特权

评论回复
5
香水城| | 2019-8-19 16:30 | 只看该作者
你如果选择LSI作为 主 时钟, 你还须通过修改配置字使能它。

0xD2: LSI selected as master clock source (only if LSI_EN option bit is set)

你通过STVP直接修改完成。

使用特权

评论回复
6
henry42|  楼主 | 2019-8-20 12:14 | 只看该作者
香水城 发表于 2019-8-19 16:30
你如果选择LSI作为 主 时钟, 你还须通过修改配置字使能它。

0xD2: LSI selected as master clock source  ...

谢谢,原帖已经说过,LSI_EN已开。

使用特权

评论回复
7
香水城| | 2019-8-22 14:24 | 只看该作者
henry42 发表于 2019-8-20 12:14
谢谢,原帖已经说过,LSI_EN已开。

嗯,我是强调要通过 修改配置字节。
另外,你代码里是否开启了其它中断、开启了看门狗等而又没有做
相关处理。

使用特权

评论回复
8
henry42|  楼主 | 2019-8-24 18:21 | 只看该作者
香水城 发表于 2019-8-22 14:24
嗯,我是强调要通过 修改配置字节。
另外,你代码里是否开启了其它中断、开启了看门狗等而又没有做
相关 ...

上面的代码就是几乎全部的代码了,没有其他内容。而且目前来看只是延时时间不对,误差一倍多。

使用特权

评论回复
9
henry42|  楼主 | 2019-9-12 23:41 | 只看该作者
顶一下,继续求助

使用特权

评论回复
10
qcliu| | 2019-9-13 11:51 | 只看该作者
确实很奇怪

使用特权

评论回复
11
kxsi| | 2019-9-13 12:09 | 只看该作者
时钟配置问题吧

使用特权

评论回复
12
nawu| | 2019-9-13 12:22 | 只看该作者
时钟配置吧

使用特权

评论回复
13
henry42|  楼主 | 2019-9-16 12:29 | 只看该作者
kxsi 发表于 2019-9-13 12:09
时钟配置问题吧

没觉得,以上是全部的代码

使用特权

评论回复
14
henry42|  楼主 | 2019-9-16 12:29 | 只看该作者

没觉得,以上是全部的代码

使用特权

评论回复
15
wowu| | 2019-9-16 15:23 | 只看该作者
时钟配置有问题

使用特权

评论回复
16
xiaoqizi| | 2019-9-16 15:39 | 只看该作者
确实很奇怪

使用特权

评论回复
17
木木guainv| | 2019-9-16 15:42 | 只看该作者
看不太懂啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

16

帖子

0

粉丝