stm32笔记 EXIT

中断

中断是中断,异常不一定是中断,中断包含在异常
优先级 具体看中断向量表
在startup_stm32fxxxx_md.s
(DCD:数据定义( Data Definition )伪指令一般用于为特定的数据分配存储单元)

中断函数在stm32f10x_it.c,可用startup_stm32fxxxx_md.s跳转过去

外部中断对应

在这里插入图片描述

NVIC 向量中断控制器

具体参考手册
Table 272. NVIC_IRQChannel 值
NVIC_IRQChannel 描述
WWDG_IRQChannel 窗口看门狗中断
PVD_IRQChannel PVD 通过 EXTI 探测中断
TAMPER_IRQChannel 篡改中断
RTC_IRQChannel RTC 全局中断
FlashItf_IRQChannel FLASH 全局中断
RCC_IRQChannel RCC 全局中断
EXTI0_IRQChannel 外部中断线 0 中断
EXTI1_IRQChannel 外部中断线 1 中断
EXTI2_IRQChannel 外部中断线 2 中断
EXTI3_IRQChannel 外部中断线 3 中断
EXTI4_IRQChannel 外部中断线 4 中断
DMAChannel1_IRQChannel DMA 通道 1 中断
DMAChannel2_IRQChannel DMA 通道 2 中断
DMAChannel3_IRQChannel DMA 通道 3 中断
DMAChannel4_IRQChannel DMA 通道 4 中断
DMAChannel5_IRQChannel DMA 通道 5 中断
DMAChannel6_IRQChannel DMA 通道 6 中断
DMAChannel7_IRQChannel DMA 通道 7 中断
ADC_IRQChannel ADC 全局中断
USB_HP_CANTX_IRQChannel USB 高优先级或者 CAN 发送中断
USB_LP_CAN_RX0_IRQChannel USB 低优先级或者 CAN 接收 0 中断
CAN_RX1_IRQChannel CAN 接收 1 中断
CAN_SCE_IRQChannel CAN SCE 中断

NVIC_Init()
根据 NVIC_InitStruct 中指定的参数初始化外设 NVIC 寄存器

NVIC_PriorityGroupConfig
设置优先级分组:先占优先级和从优先级

NVIC_PriorityGroup 描述

NVIC_PriorityGroup_0 先占优先级 0 位 从优先级 4 位
NVIC_PriorityGroup_1 先占优先级 1 位 从优先级 3 位
NVIC_PriorityGroup_2 先占优先级 2 位 从优先级 2 位
NVIC_PriorityGroup_3 先占优先级 3 位 从优先级 1 位
NVIC_PriorityGroup_4 先占优先级 4 位 从优先级 0 位
例:
/* Configure the Priority Grouping with 1 bit */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

例子:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitTypeDef NVIC_InitStruct1;
NVIC_InitStruct1.NVIC_IRQChannel = EXTI2_IRQn; //设置EXTI2中断
NVIC_InitStruct1.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级
NVIC_InitStruct1.NVIC_IRQChannelSubPriority = 2; //响应优先级
NVIC_InitStruct1.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStruct1); //初始化

EXTI

EXTI_Init()
void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct)
根据 EXTI_InitStruct 中指定的参数初始化外设 EXTI 寄存器
例子:
EXTI_InitTypeDef EXTI_InitStruct;
EXTI_InitStruct.EXTI_Line = EXTI_Line2; //设置外部中断线
EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt; //设置 EXTI 线路为中断请求
EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling; //设置输入线路下降沿为中断请求
EXTI_InitStruct.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStruct);

EXTI_GetITStatus()
检查指定的 EXTI 线路触发请求发生与否

返回值: EXTI_Line 的新状态(SET 或者 RESET)

EXTI_ClearITPendingBit() 清除 EXTI 线路挂起位

设置中断函数

void EXTI2_IRQHandler() {
	if(EXTI_GetITStatus(EXTI_Line2) != RESET) {    //判断 EXTI2 线路触发请求发生与否
			GPIOF->ODR ^= GPIO_Pin_9 | GPIO_Pin_10;
			EXTI_ClearITPendingBit(EXTI_Line2);   //清除标志位
	}
}

examp

	void PE2_EXIT_ConfigurAction(void) {
		 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
		 RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);
	
		 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
		 NVIC_InitTypeDef NVIC_InitStruct1;
		 NVIC_InitStruct1.NVIC_IRQChannel = EXTI2_IRQn;   //设置EXTI2中断 
	   	 NVIC_InitStruct1.NVIC_IRQChannelPreemptionPriority = 0;   //抢占优先级
     	 NVIC_InitStruct1.NVIC_IRQChannelSubPriority = 2;					//响应优先级
	  	 NVIC_InitStruct1.NVIC_IRQChannelCmd = ENABLE;
		 NVIC_Init(&NVIC_InitStruct1);   //初始化
																
		 GPIO_InitTypeDef GPIO_InitStruct;
		 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2;
		 GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
		 GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; //上拉
		 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;
		 GPIO_Init(GPIOE,&GPIO_InitStruct);
	
		 SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource2);  //设置外部中断线路
	
		 EXTI_InitTypeDef EXTI_InitStruct;
		 EXTI_InitStruct.EXTI_Line = EXTI_Line2; 
     	EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt; 
     	EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling; 
     	EXTI_InitStruct.EXTI_LineCmd = ENABLE;
		 EXTI_Init(&EXTI_InitStruct);
}	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值