PY32F003F18的中断线

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中断源的中断标志位
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值