概述
本文简要记述关于stm8s003中初始化timer2立即进入中断的解决方法:
在调试stm8 tim2作为100ms定时器的时候发现,在enable timer2后,不久远远小于100ms大概800us左右就会立即进入中断(更新事件触发),无论是怎样设置先后顺序,以及在enable中断之前清除中断状态位都无法解决进入中断的问题。此处澄清真的不是st的bug,不过这种设计不是我等小白能够领悟到的,哈哈!
搜索
在度娘中搜索到的结果一般解决方法都是等待第一次触发后清除事件再打开中断。出于对知(领)识(导)的好(压)奇(迫),便寻找解决方法,最终找到了问题的根源(google大法好:https://community.st.com/s/question/0D50X00009XkWotSAF/premature-tim2-interrupt-happening-immediately-on-timer-start)
原因
究其原因是因为在初始化中对预分频器(ARRPreload)进行了更新。实际上在触发更新时间后,该寄存器的配置才会生效(spec中有说明),故进入中断的原因是因为预分频器数值默认为0(写文章时并没有考究是不是0,反正远远小于我设置的数值),才在使能后短时间内触发中断,实际上是真的溢出触发了中断。
附上大家喜爱的代码,亲测可用,基于2M HSI CLK
这里没有列出中断函数,清中断神马的就不是问题的根源,不在赘述(代码不在此电脑中,懒得考了)
static void TIM2_Start()
{
GPIO_WriteReverse(GPIOA, GPIO_PIN_1);//测试用
GPIO_WriteReverse(GPIOA, GPIO_PIN_2);//测试用
TIM2_Cmd(ENABLE);
}
static void TIM2_Stop()
{
TIM2_Cmd(DISABLE);
GPIO_WriteReverse(GPIOA, GPIO_PIN_2);
TIM2_UpdateDisableConfig(ENABLE);
TIM2_GenerateEvent(TIM2_EVENTSOURCE_UPDATE);
TIM2_UpdateDisableConfig(DISABLE);
}
static void TIM2_Config(void)
{
TIM2_DeInit();
/* Time base configuration */
TIM2_TimeBaseInit(TIM2_PRESCALER_128, 0x061b);
TIM2_ARRPreloadConfig(ENABLE);
TIM2_UpdateRequestConfig(TIM2_UPDATESOURCE_REGULAR);//中断源选择为只有溢出才能触发
TIM2_GenerateEvent(TIM2_EVENTSOURCE_UPDATE);//产生更新事件,不触发中断(这就是我的解决方法,此处即更新了预分频器)
TIM2->SR1 &= 0xFE;//清除中断,按常理应该没用
TIM2->IER |= 0X01;//使能TIMER
}
[1]:我的GITHUB原文 https://ladudu.github.io/2018/11/28/STM8S_TIMER2_INTERRUPT/
[2]: 参考 https://community.st.com/s/question/0D50X00009XkWotSAF/premature-tim2-interrupt-happening-immediately-on-timer-start
上一篇:STM8L101F3输入捕获测脉宽及占空比
下一篇:STM8S TIM1/TIM2 初始化函数
推荐阅读最新更新时间:2024-11-01 11:25
设计资源 培训 开发板 精华推荐
- 使用 Analog Devices 的 LT1764AEQ-1.5 的参考设计
- 适用于STM32H745ZI MCU,SMPS的STM32 Nucleo-144开发板,支持Arduino,ST Zio和morpho连接
- 使用 Analog Devices 的 LT3066IMSE 的参考设计
- FEBFAN25800-MPSLDO2-GEVB:500 mA 低 IQ、低噪声、LDO 稳压器
- STEVAL-ISA109V1、800 mA、3 MHz、高效、双模降压-升压直流-直流转换器评估板,基于 STBB2
- CEB1308,基于 CDK1308 模数转换器的评估板
- LDK120M18R 1.8V低压降稳压器典型应用(可调版)电路
- DC2112A,基于 LTC3649EUFD 的演示板 4V = VIN = 60V 和 VOUT = 3.3V 或 5V @ 4A 同步降压转换器
- R_102_V20基于IPS2电机换向传感器的设计
- 使用 Analog Devices 的 LT4276BIUFD 的参考设计