Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Stm32 中断不会触发_Stm32_Stm32f4 - Fatal编程技术网

Stm32 中断不会触发

Stm32 中断不会触发,stm32,stm32f4,Stm32,Stm32f4,问题将于稍后删除。犯了一个愚蠢的错误,这些IRQ应该由按钮触发。我的意思是问他们为什么不自动开火 中断处理程序不会被触发。这是一本书的密码 大部分情况下。电路板基于:stm32f411RE核子 该代码是为f429,但从我的研究看来,它应该是 好的 编辑: 添加此行会使其着火,但只会发生一次: EXTI->SWIER = EXTI_SWIER_SWIER0|EXTI_SWIER_SWIER2; 所以我需要重新设置一个标志。 但为什么原始硬件中断不会触发 int main(void) {

问题将于稍后删除。犯了一个愚蠢的错误,这些IRQ应该由按钮触发。我的意思是问他们为什么不自动开火

中断处理程序不会被触发。这是一本书的密码 大部分情况下。电路板基于:stm32f411RE核子

该代码是为f429,但从我的研究看来,它应该是 好的

编辑: 添加此行会使其着火,但只会发生一次:

EXTI->SWIER = EXTI_SWIER_SWIER0|EXTI_SWIER_SWIER2;
所以我需要重新设置一个标志。 但为什么原始硬件中断不会触发


int main(void) 
{     
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN | RCC_AHB1ENR_GPIOBEN;
RCC->APB2ENR = RCC_APB2ENR_SYSCFGEN; 
__DSB();

GPIOA->MODER |= GPIO_MODER_MODE5_0; 
GPIOB->PUPDR |= GPIO_PUPDR_PUPD2_0;

    SYSCFG->EXTICR[0] = SYSCFG_EXTICR1_EXTI0_PB | SYSCFG_EXTICR1_EXTI2_PB ;

    EXTI->FTSR = EXTI_FTSR_TR2;    
    EXTI->RTSR = EXTI_RTSR_TR0;
    EXTI->IMR = EXTI_IMR_MR0 | EXTI_IMR_MR2;

    NVIC_EnableIRQ(EXTI0_IRQn);
    NVIC_EnableIRQ(EXTI2_IRQn);

    while (1);
    } 
/* main */
void EXTI0_IRQHandler(void) 
{
        if ( EXTI->PR & EXTI_PR_PR0) 
        {
            EXTI->PR = EXTI_PR_PR0;

            GPIOA->ODR ^= GPIO_ODR_OD5;    }

}

void EXTI2_IRQHandler(void) 
{
        if ( EXTI->PR & EXTI_PR_PR2) 
        {
            EXTI->PR = EXTI_PR_PR2;
            GPIOA->ODR ^= GPIO_ODR_OD5;   
        }
}

您还必须清除NVIC中挂起的IRQ,例如

NVIC_ClearPendingIRQ(EXTI0_IRQn)


此外,您需要确保中断向量表中包含正确的处理程序条目。通常中断向量表在启动文件中,但它取决于您的系统。

好的,谢谢。使用这个和NVIC_SetPendingIRQ()可以得到所需的结果,但问题是为什么书中的注册方式不起作用,这让我很烦。需要一些时间来弄清楚你对向量表的看法。没有代表,不能投票;)你说“书中的注册方式不起作用”是什么意思?NVIC_ClearPendingIRQ(不是…*集*…)是与您显示的代码分开的要求。这只是你需要用ARM Cortex-M MCU做的事情。如果你的书的密码是elide,我认为这是本书的错误。我不知道为什么有人否决了我的答案;-)据我所知,设置这个寄存器应该足够了-EXTI->IMR=EXTI_IMR_MR0 | EXTI_IMR_MR2;编辑:足以点燃IRQ'ssoory。IRQ应该由按钮触发;))确认您已收到,我将删除该问题;)还是我应该离开它?