Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.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
同一EXTI行STM32上的多个中断 有可能从同一Ext线得到多个中断,例如PA1和PC1,它们都在EXTI1上。_C_Interrupt_Stm32_Interrupt Handling - Fatal编程技术网

同一EXTI行STM32上的多个中断 有可能从同一Ext线得到多个中断,例如PA1和PC1,它们都在EXTI1上。

同一EXTI行STM32上的多个中断 有可能从同一Ext线得到多个中断,例如PA1和PC1,它们都在EXTI1上。,c,interrupt,stm32,interrupt-handling,C,Interrupt,Stm32,Interrupt Handling,因此,通过点击PA1上的一个按钮,LED在PB6上亮起,通过点击PC1,LED在PC0上切换 微控制器==>STM32F091 这是我用于从两条不同线路中断的代码: //PC1 SYSCFG->EXTICR[0] |= SYSCFG_EXTICR1_EXTI1_PA; EXTI->IMR = EXTI_IMR_MR1; EXTI->RTSR = EXTI_RTSR_TR1; EXTI->FTSR = EXTI_FTSR_TR1; //PB0 SYSCFG->EXT

因此,通过点击PA1上的一个按钮,LED在PB6上亮起,通过点击PC1,LED在PC0上切换

微控制器==>STM32F091

这是我用于从两条不同线路中断的代码:

//PC1
SYSCFG->EXTICR[0] |= SYSCFG_EXTICR1_EXTI1_PA;
EXTI->IMR = EXTI_IMR_MR1;
EXTI->RTSR = EXTI_RTSR_TR1;
EXTI->FTSR = EXTI_FTSR_TR1; 
//PB0
SYSCFG->EXTICR[0] |= SYSCFG_EXTICR1_EXTI1_PC;
EXTI->IMR |= EXTI_IMR_MR1; 
EXTI->RTSR |= EXTI_RTSR_TR1; 
EXTI->FTSR |= EXTI_FTSR_TR1;
NVIC_EnableIRQ(EXTI0_1_IRQn);
NVIC_SetPriority(EXTI0_1_IRQn,0);
中断处理程序:

void EXTI0_1_IRQHandler(void)
{
if ((EXTI->PR & EXTI_PR_PR1) == EXTI_PR_PR1)  /* Check line 1 has triggered      the IT */
{
EXTI->PR = EXTI_PR_PR1; /* Clear the pending bit */
GPIOC->ODR ^= 1<<0;
}
if ((EXTI->PR & EXTI_PR_PR0) == EXTI_PR_PR0)  /* Check line 0 has triggered  the IT */
{
EXTI->PR = EXTI_PR_PR0; /* Clear the pending bit */
    GPIOB->ODR ^= 1<<6;
}
void EXTI0\u 1\u IRQHandler(void)
{
如果((EXTI->PR&EXTI\u PR\u PR1)=EXTI\u PR\u PR1)/*检查第1行是否触发了IT*/
{
EXTI->PR=EXTI\u PR\u PR1;/*清除挂起位*/
GPIOC->ODR^=1PR=EXTI\u PR\u PR0;/*清除挂起位*/
GPIOB->ODR^=1不,你不能。对不起

16个GPIO驱动的ExtI中的每一个只能连接到六个相应引脚中的一个。例如,EXTI0可以连接到PA0、PB0、PC0、PD0、PE0或PF0等。像
SYSCFG\u EXTICR1\u EXTI1\u PA
这样的值是而不是纯位掩码,并且不能组合


有关更多详细信息,请参阅的第12.2.5节。

警告:我对stm32不太熟悉:这种行:
EXTI->PR=EXTI\u PR\u PR1;
正在分配整个
EXTI>PR
寄存器。我想您只想修改一位。建议:
EXTI->PR\EXTI\u PR\u PR1;