首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用中断问题的STM32F103 / libopencm3 / GPIO切换

使用中断问题的STM32F103 / libopencm3 / GPIO切换
EN

Stack Overflow用户
提问于 2020-05-07 21:26:47
回答 2查看 1K关注 0票数 1

因此,我试图切换一个LED的基础上,中断从一个按钮。

理想情况下,当按钮被按下,LED应该切换,即打开,如果它关闭,反之亦然。但是,当我执行这段代码时,它切换并返回到它的原始状态。

预期结果: LED关闭按钮按下

实际结果: LED关闭按钮按下? LED上LED关闭

我增加了一个延迟,以使脱钩,所以反弹是不现实的。另外,当按下按钮时,GPIO的ODR会在ISR中设置,那么当退出ISR时,它是如何被清除的?

我真的很感谢你的帮助!谢谢。

代码语言:javascript
复制
#include <libopencm3/stm32/rcc.h>
#include <libopencm3/stm32/gpio.h>
#include <libopencm3/stm32/exti.h>
#include <libopencm3/cm3/nvic.h>

#define LEDPIN (GPIO13)

static void exti_setup(void)
{
    /* Enable GPIOA and AFIO clock. */
    rcc_periph_clock_enable(RCC_GPIOB);
    rcc_periph_clock_enable(RCC_AFIO);

    /* Enable EXTI0 interrupt. */
    nvic_enable_irq(NVIC_EXTI15_10_IRQ);

    /* Set GPIO12 (in GPIO port B) to input  */
    gpio_set_mode(GPIOB, GPIO_MODE_INPUT,GPIO_CNF_INPUT_FLOAT, GPIO12);

    /* Configure the EXTI subsystem. */
    exti_select_source(EXTI12,GPIOB);
    exti_set_trigger(EXTI12, EXTI_TRIGGER_BOTH);
    exti_enable_request(EXTI12);
}


static void gpio_setup(void)
{
    /* Enable clock for GPIO port C */
    rcc_periph_clock_enable(RCC_GPIOC);

    /* Set LEDPIN (in GPIO port C) as opendrain output  */
    gpio_set_mode(GPIOC, GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_OPENDRAIN, LEDPIN);
}

void delay(){
    int i;
    for (i = 0; i < 1000000; i++) 
    {
        __asm__("nop");
    } 
}

void handler(){
    delay();
    gpio_toggle(GPIOC, GPIO13);
}

int main(void)
{
    gpio_setup();
    exti_setup();

    while (1) {
    __asm__("nop");
    }
    return 0;
}

void exti15_10_isr()
{
    exti_reset_request(EXTI12);
    handler();
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-08 00:27:07

push-pull

  • Butttons不应该使用EXTI,因为它会使删除变得更加复杂,经常会中断uC,而使用计时器中断来读取密钥并删除

票数 2
EN

Stack Overflow用户

发布于 2020-05-08 10:11:14

正如@dev_eng正确地指出的,问题是中断被配置为上升/下降的边缘。

配置它的单一边缘,无论是上升还是下降,解决了我的问题。

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

https://stackoverflow.com/questions/61668033

复制
相关文章

相似问题

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