[STM8] 求助TIM4配合LSI奇怪的延时

[复制链接]
1004|16
 楼主| henry42 发表于 2019-8-16 15:39 | 显示全部楼层 |阅读模式
LSI, TI, pi, gp, IO
芯片是stm8s103f3p6,fmaster选取LSI,LSI_EN enable
奇怪的问题,本意是 tim4 1分频,arr 128,那么每次溢出1ms,但是奇怪的是,有时候时间是一倍,有时候程序在enableInterrupts就死掉了,请问是哪儿出错了呢


  1. unsigned long elapseTime = 0;

  2. void DelayMS(unsigned int ms) {
  3.   unsigned long lmttime = elapseTime + ms;
  4.   while(lmttime >= elapseTime);
  5.   return;
  6. }

  7. int main( void )
  8. {
  9.   CLK_DeInit();
  10.   
  11.   CLK_LSICmd(ENABLE);
  12.   CLK_ClockSwitchConfig(CLK_SWITCHMODE_MANUAL, CLK_SOURCE_LSI, DISABLE, CLK_CURRENTCLOCKSTATE_DISABLE);
  13.   while(CLK_GetFlagStatus(CLK_FLAG_LSIRDY)==RESET);
  14.   CLK_ClockSwitchCmd(ENABLE);  
  15.   while(CLK_GetSYSCLKSource() != CLK_SOURCE_LSI){
  16.   }
  17.   
  18.   TIM4_DeInit();
  19.   TIM4_TimeBaseInit(TIM4_PRESCALER_1, 128);
  20.   TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
  21.   TIM4_SetCounter(0x00);
  22.   TIM4_Cmd(ENABLE);
  23.   

  24.   GPIO_DeInit(GPIOB);
  25.   GPIO_Init(GPIOB, GPIO_PIN_5, GPIO_MODE_OUT_OD_LOW_SLOW);
  26.   
  27.   GPIO_WriteReverse(GPIOB, GPIO_PIN_5);
  28.   
  29.   enableInterrupts();
  30.   
  31.   while (1) {
  32.     DelayMS(2000);
  33.     GPIO_WriteReverse(GPIOB, GPIO_PIN_5);
  34.   }
  35.   
  36.   return 0;
  37. }

  38. INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler, 23)
  39. {
  40.    elapseTime++;
  41.    TIM4_ClearITPendingBit(TIM4_IT_UPDATE);
  42. }
dongnanxibei 发表于 2019-8-16 22:25 | 显示全部楼层
没看明白,你用cubeMX配置试试
598330983 发表于 2019-8-17 09:25 | 显示全部楼层
这个没有003好用。
 楼主| henry42 发表于 2019-8-19 16:04 | 显示全部楼层
还是没解决,难道是系统资源需要占用很大一部分LSI的频率?
香水城 发表于 2019-8-19 16:30 | 显示全部楼层
你如果选择LSI作为 主 时钟, 你还须通过修改配置字使能它。

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

你通过STVP直接修改完成。
 楼主| henry42 发表于 2019-8-20 12:14 | 显示全部楼层
香水城 发表于 2019-8-19 16:30
你如果选择LSI作为 主 时钟, 你还须通过修改配置字使能它。

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

谢谢,原帖已经说过,LSI_EN已开。
香水城 发表于 2019-8-22 14:24 | 显示全部楼层
henry42 发表于 2019-8-20 12:14
谢谢,原帖已经说过,LSI_EN已开。

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

上面的代码就是几乎全部的代码了,没有其他内容。而且目前来看只是延时时间不对,误差一倍多。
 楼主| henry42 发表于 2019-9-12 23:41 | 显示全部楼层
顶一下,继续求助
qcliu 发表于 2019-9-13 11:51 | 显示全部楼层
确实很奇怪
kxsi 发表于 2019-9-13 12:09 | 显示全部楼层
时钟配置问题吧
nawu 发表于 2019-9-13 12:22 | 显示全部楼层
时钟配置吧
 楼主| henry42 发表于 2019-9-16 12:29 | 显示全部楼层
kxsi 发表于 2019-9-13 12:09
时钟配置问题吧

没觉得,以上是全部的代码
 楼主| henry42 发表于 2019-9-16 12:29 | 显示全部楼层

没觉得,以上是全部的代码
wowu 发表于 2019-9-16 15:23 | 显示全部楼层
时钟配置有问题
xiaoqizi 发表于 2019-9-16 15:39 | 显示全部楼层
确实很奇怪
木木guainv 发表于 2019-9-16 15:42 | 显示全部楼层
看不太懂啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

16

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部