Внешнее прерывание срабатывает после установки контакта
Я пытаюсь запустить внешнее прерывание на Nucleo-F030R8 и ударить по стене.
Все настроено и отлично работает в пошаговом режиме, но когда я подключаю свою плату к тестовой панели с помощью простой перемычки и запускаю тот же код, внешнее прерывание срабатывает, даже когда моя тестовая панель (вторая Nucleo-F302R8, который должен давать только один сигнал, который я измеряю первым) не включен.
Я использую смесь библиотеки HAL от STM и немного собственного кода.
Кто-нибудь в конце концов сталкивался с подобной проблемой? Я использую System Workbench для STM32.
Часть ISR, прерыватель прерывается
void EXTI0_1_IRQHandler(void)
{
/* USER CODE BEGIN EXTI0_1_IRQn 0 */
if ((EXTI->IMR & EXTI_IMR_MR0) && (EXTI->PR & EXTI_PR_PR0))
{
int_flag_pin.copen = 1;
}
if ((EXTI->IMR & EXTI_IMR_MR1) && (EXTI->PR & EXTI_PR_PR1))
{
int_flag_pin.ma1 = 1;
}
/* USER CODE END EXTI0_1_IRQn 0 */
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_1);
/* USER CODE BEGIN EXTI0_1_IRQn 1 */
/* USER CODE END EXTI0_1_IRQn 1 */
}
Между установкой низкого уровня Pin и повышением изменения срабатывает прерывание.
TEST_GPIO_Port->BSRR=(uint32_t)TEST_Pin;
//HAL_GPIO_WritePin(TEST_GPIO_Port,TEST_Pin,GPIO_PIN_RESET);
TEST_GPIO_Port->BRR=(uint32_t)TEST_Pin;
change_rising(0);
Обновление: Может ли быть так, что сброс Pin через BSRR или BRR генерирует прерывание? Я проверяю свой код шаг за шагом, и каждый раз, когда вывод сбрасывается, генерируется прерывание.
0 ответов
Если TEST_Pin - это контакт GPIO_PIN_0 или GPIO_PIN_1, вы получите IRQ легально. EXTI0_1_IRQHandler ловит irq с любого порта, кроме вывода №0 или №1.