【问题标题】:stm32 external interrupt pin mode changingstm32外部中断引脚模式改变
【发布时间】:2021-09-12 01:59:12
【问题描述】:

我正在设计一个带有 stm32f103c8t6 的 ESC。在我的设计中,我使用 BEMF 电路来检测电机的相位。从 BEMF 电路(带有比较器 LM339)我正在读取 3 个中断引脚,但是当代码运行时,我需要更改引脚模式(如上升沿检测到下降沿检测),并且我需要禁用其他 2 个(这取决于电机的相位那时)中断引脚,以免读取来自电路的噪声。我该怎么做?

感谢您的帮助,

【问题讨论】:

    标签: stm32 stm32f1


    【解决方案1】:

    像这样在下降/上升沿之间切换:

    void isr_hallsensor(void) {
        if (hallsensor_edge_select) {
            //rising edge, magnet has left the detection zone.
            gpio_hall_sensor.Mode = GPIO_MODE_IT_FALLING;
            HW_GPIO_Init(HALLSENSOR_PORT, HALLSENSOR_PIN, &gpio_hall_sensor);
            hallsensor_edge_select = 0;
            __HAL_GPIO_EXTI_CLEAR_IT(HALLSENSOR_PIN);
        } else {
            //falling edge, magnet detected.
            gpio_hall_sensor.Mode = GPIO_MODE_IT_RISING;
            HW_GPIO_Init(HALLSENSOR_PORT, HALLSENSOR_PIN, &gpio_hall_sensor);
            hallsensor_edge_select = 1;
            __HAL_GPIO_EXTI_CLEAR_IT(HALLSENSOR_PIN);
        }
    }
    

    像这样启用中断:

        __HAL_TIM_CLEAR_IT(&htim16, TIM_IT_UPDATE);
        HAL_NVIC_SetPriority(TIM1_UP_TIM16_IRQn, 15, 15);
        HAL_NVIC_EnableIRQ(TIM1_UP_TIM16_IRQn);
    

    这样禁用中断:

        HAL_NVIC_DisableIRQ(TIM6_DAC_IRQn);
    

    这至少能让你入门,这是针对 STM32L4 的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-21
      • 2018-03-30
      • 2021-02-11
      • 2015-09-29
      • 2020-10-24
      • 1970-01-01
      • 1970-01-01
      • 2021-06-19
      相关资源
      最近更新 更多