簡體   English   中英

stm32中斷配置出錯

[英]stm32 interrupt configurations goes wrong

早上好,我正在處理一個問題,即在設置另一個引腳時關閉所選引腳上的中斷。 我的 MCU 是 stm32f4xx。
我的意思是,我在 GPIO_MODE_IT_FALLING 檢測上設置了 PC0、PC1、PC2、PC3、PB14、PB15,當我將引腳 PA1、PA2、PA3、PA4 設置為 GPIO_MODE_IT_RISING_FALLING 檢測時,PC 和 PB 不起作用。
如果 PC-PB 單獨設置,它可以工作。 如果我設置了額外的 PA1-4,引腳 PC-PB 就會忘記中斷。 每個 PC0-3 和 PB14-PB15 的代碼如下:

GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = FAULT1_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

HAL_NVIC_SetPriority(EXTI0_IRQn, 5, 0); // EXTI0_IRQn changes on dependently on selected pins e.g. EXTI15_10_IRQn
HAL_NVIC_EnableIRQ(EXTI0_IRQn); // here the same

在我對每個引腳 PC0-3 和 PB14-15 進行迭代之后,我對 PA2-PA4 使用相同的模式,如下所示:

GPIO_InitTypeDef GPIO_InitStruct = { 0 };
GPIO_InitStruct.Pin = GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* EXTI interrupt init*/
HAL_NVIC_SetPriority(EXTI1_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(EXTI1_IRQn);
HAL_NVIC_SetPriority(EXTI2_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(EXTI2_IRQn);
HAL_NVIC_SetPriority(EXTI3_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(EXTI3_IRQn);
HAL_NVIC_SetPriority(EXTI4_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(EXTI4_IRQn);

然后引腳 PC、PB 上的中斷消失。 只有來自 PA 的中斷才能正常工作。 如何編寫允許 PC、PB 和 PA 中斷工作的程序? 我也在使用 FreeRTOS,也許這里有問題?

可悲的是,這是 STM32 系列的一個“功能”。 你想做的事是做不到的。

您必須安排您的引腳分配以解決此問題:每個數字只能在一個字母上中斷(例如:PA2 或 PB2 不能同時使用)。

另一個限制是數字 5-9 和 10-15 共享中斷。 您可以在例如:PA5、PB6、PA7、PB8、PC9 上設置中斷,但它們會導致相同的處理程序運行。 顯然,您可以在處理程序中讀取 GPIO 輸入,但如果信號是瞬時的並且在處理程序運行時已經消失,您將不知道發生了哪個信號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM