问题:
STM32F407IG的PH10引脚配置为外部中断输入时,无法正常触发中断,相邻的PH11 PH12正常。
解决办法:
向SYSCFG_EXTICR1寄存器的EXTI2[3:0] 和 SYSCFG_EXTICR3寄存器的EXTI10[3:0] 写入 二进制0b0111即可。(官方手册标错了,应该是0b0111才对)
具体代码如下
/**
* @brief 配置 PH10 为外部中断,并设置中断优先级
* @param 无
* @retval 无
*/
void EXTI_Key_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
__HAL_RCC_GPIOH_CLK_ENABLE();
/* PH10 */
GPIO_InitStructure.Pin = GPIO_PIN_10;
GPIO_InitStructure.Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStructure.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOH, &GPIO_InitStructure);
HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
/*
* 由于芯片内部缺陷,PH10和PH2的外部中断源必须同时打开,否则无法正常使用,
* 打开(PH10/PH2)的外部中断源后,(PI10/PI2)的外部中断源无法使用,
* (PH10/PH2)和(PI10/PI2)只能二选一
*/
SYSCFG->EXTICR[0] |= 0x07 << 8;
SYSCFG->EXTICR[2] |= 0x07 << 8;
}
局限性:
此方法会导致PI10和PI2无法响应外部中断,具体如下:
参考资料:
es0182-stm32f405407xx-and-stm32f415417xx-device-limitations-stmicroelectronics.pdf