外部中断有点像51单片机的中断INT一样,都能够设置为上升沿、下降沿和双边沿触发;不同之处在于STM32的大多数GPIO口都能设置为外部中断输入功能,这样带来的好处有:在PCB设计和需求大量外部中断功能很有帮助。STM32F107VCT一共有5组GPIO,每组又有16个引脚。这里提供复用的方式提供了16个中断源。PA0、PB0、PC0、PD0、PE0都是共有相同的中断源EXIT0。
开发板上的按键对应关系为:KEY1—PC4;KEY2—PB10;KEY3—PC13;KEY4—PA0。外接上拉电阻,在设置GPIO的状态的时候,可以设置为输入上拉模式。然后采用GPIO_EXTILineConfig库函数将GPIO设置为EXTI模式。
/* Selects KEY1-PC.04 as EXTI Line 4 */
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource4);
第三步是设置EXTI的模式,最后是编写相应的中断函数。
需要注意的是中断向量表中EXTI5到EXTI9是复用在一起的,名称为EXTI9_5;
EXTI10到EXTI15是复用在一起的,名称为EXTI15_10;
这部分主程序为:
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/* Configure the Priority Group to 2 bits */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
/* Enable the EXTI Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
NVIC_Init(&NVIC_InitStructure);
}
int main(void)
{
/* Setup STM32 system (clock, PLL and Flash configuration) */
SystemInit();
/* Add your application code here
*/
LED_Configuration();
KEY_Configuration();//按键时钟和端口配置
EXIT_Configuration();//外部中断配置
NVIC_Configuration();
/* Infinite loop */
while (1)
{
}
}
void EXTI0_IRQHandler(void) /* Key 4 */
{
if(EXTI_GetITStatus(EXTI_Line0) != RESET)
{
LED_ALL_OFF();
LED4_ON();
/* Clear the EXTI Line 0 */
EXTI_ClearITPendingBit(EXTI_Line0);
}
}
/*******************************************************************************
* Function Name : EXTI4_IRQHandler
* Description : This function handles External interrupt Line 4 request.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void EXTI4_IRQHandler(void) /* Key 1 */
{
if(EXTI_GetITStatus(EXTI_Line4) != RESET)
{
LED_ALL_OFF();
LED1_ON();
/* Clear the EXTI Line 4 */
EXTI_ClearITPendingBit(EXTI_Line4);
}
}
/*******************************************************************************
* Function Name : EXTI15_10_IRQHandler
* Description : This function handles External lines 15 to 10 interrupt request.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void EXTI15_10_IRQHandler(void) /* Key 2 & 3 */
{
if(EXTI_GetITStatus(EXTI_Line10) != RESET)
{
LED_ALL_OFF();
LED2_ON();
/* Clear the EXTI Line 10 */
EXTI_ClearITPendingBit(EXTI_Line10);
}
if(EXTI_GetITStatus(EXTI_Line13) != RESET)
{
LED_ALL_OFF();
LED3_ON();
/* Clear the EXTI Line 13 */
EXTI_ClearITPendingBit(EXTI_Line13);
}
}
上一篇:神舟IV学习笔记(五)实时时钟RTC
下一篇:神舟IV学习笔记(七)定时器中断流水灯
推荐阅读最新更新时间:2024-03-16 15:33
设计资源 培训 开发板 精华推荐
- 扩大碳化硅供应,英飞凌联手GT Advanced Technologies
- 新专利显示苹果眼镜 VR头显可采用苹果智能戒指作为配件
- 机智堂:5纳米芯片聚齐登场 盘点其各自优势
- 三星发布了Exynos 1080旗舰芯片:5纳米EUV工艺 vivo首发
- Nordic低功耗蓝牙传感器持续监测吉他温湿度,提供高效保护
- Qorvo 扩展其 BAW 滤波器产品组合,以支持全球 5G 基站部署
- Vishay推出额定功率为0.5 W的增强型厚膜片式电阻
- AMS2021线上研讨会——新兴汽车市场发展现状及未来趋势
- 高通创投发起XR产业投资联盟,持续培育XR生态创新
- Ethernity Networks签署UEP-60新供货协议