首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >STM8 TIM1 (或TIM2) -外部中断事件后1个5秒的节拍

STM8 TIM1 (或TIM2) -外部中断事件后1个5秒的节拍
EN

Stack Overflow用户
提问于 2019-03-17 21:50:13
回答 1查看 942关注 0票数 0

我正在尝试在STM8S103F3中实现这个逻辑: 1)初始化后,控制器在GPIOC上等待外部中断(默认情况下是高)。2.1)外部中断触发:如果GPIOC的PIN5为低电平,则测试led点亮,并启动计时器5s。2.2)外部中断触发:如果GPIOC的PIN5为高,则关闭测试led并停止计时器。3)定时器中断触发:关闭测试led。

我的代码:

代码语言:javascript
复制
#include "stm8s.h"
#include "stm8s_gpio.h"
#include "stm8s_exti.h"
#include "stm8s_tim1.h"

void tim1_update_handler() __interrupt(11)
{
    GPIO_WriteHigh(GPIOB, GPIO_PIN_5);
    TIM1_ClearITPendingBit(TIM1_IT_UPDATE);
}

void portc_ext_int_handler() __interrupt(5)
{
    uint8_t state = GPIO_ReadInputData(GPIOC);
    if (state & GPIO_PIN_5) // PORTC pin 5 high, default state, button not pressed.
    {
        TIM1_SetCounter(0);
        TIM1_Cmd(ENABLE);
    }
    else // Button pressed.
    {
        GPIO_WriteLow(GPIOB, GPIO_PIN_5);
        TIM1_Cmd(DISABLE);
    }
}

int main(void)
{
    disableInterrupts();

    GPIO_Init(GPIOB, GPIO_PIN_5, GPIO_MODE_OUT_PP_HIGH_FAST);
    GPIO_Init(GPIOC, GPIO_PIN_ALL, GPIO_MODE_IN_PU_IT);

    EXTI_DeInit();
    EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOC, EXTI_SENSITIVITY_RISE_FALL);

    TIM1_TimeBaseInit(2000, TIM1_COUNTERMODE_UP, 5000, 0);
    TIM1_SelectOnePulseMode(TIM1_OPMODE_SINGLE);
    TIM1_ITConfig(TIM1_IT_UPDATE, ENABLE);

    enableInterrupts();

    while (1)
    {
        wfi();
    }
}

外部中断触发正常,但定时器中断不触发。

我的计时器做错了什么,我怎么才能纠正它?

EN

回答 1

Stack Overflow用户

发布于 2019-12-15 22:40:12

这可能是因为中断优先级,默认情况下设置为不中断正在进行的ISR。更改ITC_xxx寄存器可以设置这些优先级,以便一个IRQ可以中断另一个IRQ,这正是定时器所需的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55207765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档