PY32F003F18的中断线有30条,其中Line20~Line28保留不用,见下图:

Line0~Line8需要配置,选择引脚和中断线连接,和GPIO引脚对应,Line9~Line15和PA9~PA15一一对应。见下图:




外部中断选择寄存器1(EXTI_EXTICR1)中bit1:0=00B,则选择"PA0连接到中断线Line0
外部中断选择寄存器1(EXTI_EXTICR1)中bit1:0=01B,则选择"PB0连接到中断线Line0
外部中断选择寄存器1(EXTI_EXTICR1)中bit1:0=10B,则选择"PF0连接到中断线Line0
外部中断选择寄存器1(EXTI_EXTICR1)中bit9:8=00B,则选择"PA1连接到中断线Line1
外部中断选择寄存器1(EXTI_EXTICR1)中bit9:8=01B,则选择"PB1连接到中断线Line1
外部中断选择寄存器1(EXTI_EXTICR1)中bit9:8=10B,则选择"PF1连接到中断线Line1
外部中断选择寄存器1(EXTI_EXTICR1)中bit17:16=00B,则选择"PA2连接到中断线Line2
外部中断选择寄存器1(EXTI_EXTICR1)中bit17:16=01B,则选择"PB2连接到中断线Line2
外部中断选择寄存器1(EXTI_EXTICR1)中bit17:16=10B,则选择"PF2连接到中断线Line2
外部中断选择寄存器1(EXTI_EXTICR1)中bit25:24=00B,则选择"PA3连接到中断线Line3
外部中断选择寄存器1(EXTI_EXTICR1)中bit25:24=01B,则选择"PB3连接到中断线Line3
外部中断选择寄存器1(EXTI_EXTICR1)中bit25:24=10B,则选择"PF3连接到中断线Line3
外部中断选择寄存器2(EXTI_EXTICR2)中bit1:0=00B,则选择"PA4连接到中断线Line4
外部中断选择寄存器2(EXTI_EXTICR2)中bit1:0=01B,则选择"PB4连接到中断线Line4
外部中断选择寄存器2(EXTI_EXTICR2)中bit1:0=10B,则选择"PF4连接到中断线Line4
外部中断选择寄存器2(EXTI_EXTICR2)中bit8=0,则选择"PA5连接到中断线Line5
外部中断选择寄存器2(EXTI_EXTICR2)中bit8=1,则选择"PB5连接到中断线Line5
外部中断选择寄存器2(EXTI_EXTICR2)中bit17:16=00B,则选择"PA6连接到中断线Line6
外部中断选择寄存器2(EXTI_EXTICR2)中bit17:16=01B,则选择"PB6连接到中断线Line6
外部中断选择寄存器2(EXTI_EXTICR2)中bit24=0,则选择"PA7连接到中断线Line7
外部中断选择寄存器2(EXTI_EXTICR2)中bit24=1,则选择"PB7连接到中断线Line7
外部中断选择寄存器3(EXTI_EXTICR3)中bit0=0,则选择"PA8连接到中断线Line8
外部中断选择寄存器3(EXTI_EXTICR3)中bit0=1,则选择"PB8连接到中断线Line8
PA9~P15和中断线Line9~Line15一一对应连接。
GPIO通过外部中断线产生中断:
- #include "KeyIntrrupt.h"
- #include "LED.h"
- #include "MyGPIO.h"
-
- void Key1_Interrupt_Init(void);
-
- //函数功能:Key1引脚初始化为外部中断输入
- void Key1_Interrupt_Init(void)
- {
-
- GPIO_InitTypeDef GPIO_InitStructureure;
-
- __HAL_RCC_GPIOA_CLK_ENABLE(); //GPIOA时钟使能
-
- GPIO_InitStructureure.Pin = GPIO_PIN_12;//选择第12脚
- GPIO_InitStructureure.Pull = GPIO_PULLUP;//引脚上拉被激活
- // GPIO_InitStructureure.Pull = GPIO_NOPULL;//引脚上拉和下拉都没有被激活
- GPIO_InitStructureure.Speed = GPIO_SPEED_FREQ_MEDIUM;//配置GPIO速度为中速
- GPIO_InitStructureure.Mode = GPIO_MODE_IT_FALLING;//配置为下降沿检测模式
- HAL_GPIO_Init(GPIOA, &GPIO_InitStructureure);
- //根据GPIO_InitStructureure结构变量指定的参数初始化GPIOA的外设寄存器
- //因为使用了GPIO_MODE_IT_FALLING,所以使能了外部中断线
-
- /*
- __HAL_RCC_GPIOA_CLK_ENABLE(); //GPIOA时钟使能
- Configure_Pin_Direction_mode(GPIOA,GPIO_PIN_12,GPIO_MODE_IT_FALLING);
- Activate_Pull_up_or_Pull_down_for_Pin(GPIOA,GPIO_PIN_12,GPIO_PULLUP);
- Select_External_Interrupt_Line(GPIOA,GPIO_PIN_12);
- Set_EXTI_line_X_InterruptSwitch(GPIO_PIN_12,GPIO_MODE_IT_FALLING);
- // Set_EXTI_line_X_EventSwitch(GPIO_PIN_12,GPIO_MODE_IT_FALLING);
- Set_Rising_And_Falling_Mode(GPIO_PIN_12,GPIO_MODE_IT_FALLING);
- */
-
- HAL_NVIC_SetPriority(EXTI4_15_IRQn,0x03,0);
- //EXTI4_15_IRQn表示外部中断线4~中断线15,EXTI4_15_IRQn
- //设置中断优先级为0x03,0无意义,注意:0<=PreemptPriority<=3,值越大,表示中断优先级越低
- //Enable and set Button EXTI Interrupt to the lowest priority
-
- HAL_NVIC_EnableIRQ(EXTI4_15_IRQn);
- //EXTI4_15_IRQn表示外部中断线4~中断线15,EXTI4_15_IRQn
- //使能EXTI4_15_IRQn中断
- }
-
- //函数功能:GPIO4~GPIO15外部中断服务程序
- void EXTI4_15_IRQHandler(void)
- {
- if(__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_12) != 0x00u)
- {//读"GPIO_PIN_12事件挂起标志位",当软件或者硬件产生上升沿/下降沿触发事件时,该位置位。
- MCU_LED_Toggle();//输出电平翻转
- // __HAL_GPIO_EXTI_CLEAR_FLAG(GPIO_PIN_12);//清除外部事件标志位
- __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_12);//清除外部事件标志位
- //清除"GPIO_PIN_12外部事件标志位"
- //当软件或者硬件产生上升沿/下降沿触发事件时,该位置位;
- }
- NVIC_ClearPendingIRQ(EXTI4_15_IRQn);//清除EXTI4_15_IRQn中断源的中断标志位
- }