stm32外部中断引脚模式改变

Posted

技术标签:

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

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

感谢您的帮助,

【问题讨论】:

【参考方案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 的。

【讨论】:

以上是关于stm32外部中断引脚模式改变的主要内容,如果未能解决你的问题,请参考以下文章

stm32cubemx 外部中断

STM32共用中断线的外部中断引脚的判断

STM32的外部中断问题

stm32外部按键中断无法退出中断问题

关于STM32的外部引脚中断的问题

STM32 TIM1 ETR计数外部脉冲数,怎么用中断方法实现?