STM22学习笔记——EXTI外部中断

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


引言

基于B站江科大自化协的教程视频来编写,供自己遗忘后重新回忆。对射式红外传感器计次工程
中断需要注意的点是在主函数和中断函数中不要操作相同的硬件,如果功能冲突,一个解决办法就是在中断中进行标志位操作,当中断返回时,在对变量进行操作。

一、AFIO配置

AFIO并没有专门的库函数文件,库函数文件与GPIO库函数文件在一起。

1.AFIO库函数介绍

1.GPIO_AFIODeInit(void) : 用来复位AFIO外设,调用函数,AFIO外设的配置全部清除。
2.GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin):锁定GPIO配置。
3.GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource) 与GPIO_EventOutputCmd(FunctionalState NewState) :用来配置AFIO的事件输出功能,使用较少。
4.GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState) :用来进行引脚重映射
5.GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource):配置AFIO的数据选择器,选择中断引脚
6.GPIO_ETH_MediaInterfaceConfig(uint32_t GPIO_ETH_MediaInterface):与以太网有关

2.EXTI库函数介绍

1.EXTI_DeInit(void) :配置清除,恢复上电默认状态
2.EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct):根据结构体内参数配置EXTI外设
3.EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct) :把参数传递的结构体变量赋一个默认值
4.EXTI_GenerateSWInterrupt(uint32_t EXTI_Line) :软件触发外部中断。
//5和6主函数中查看和清除标志位
5.EXTI_GetFlagStatus(uint32_t EXTI_Line):获取指定标志位是否置1;
6.EXTI_ClearFlag(uint32_t EXTI_Line) :对指定标志位进行清除。
//7和8在中断函数中查看和清除标志位
7.EXTI_GetITStatus(uint32_t EXTI_Line) :获取中断标志位是否置1
8.EXTI_ClearITPendingBit(uint32_t EXTI_Line) :清除中断挂起标志位

3.NVIC库函数介绍

1.NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup) :用来中断分组
2.NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct):根据结构体里面指定的参数初始化NVIC
3.NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset) :设置中断向量表
4.NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState):系统低功耗配置

4.初始化函数

void CountSensor_Init(void)
{
	//开启对应的外设,如GPIOB、AFIO等等
	//内核外设不用开启时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;             //上拉输入
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_14;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&GPIO_InitStructure);
	
	//配置AFIO
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource14);  //连接PB14口的第14个中断线路 
	
	//配置EXTI
	EXTI_InitTypeDef EXTI_InitStructure;
	EXTI_InitStructure.EXTI_Line=EXTI_Line14;
	EXTI_InitStructure.EXTI_LineCmd=ENABLE;
	EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
	EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;      //下降沿触发
	EXTI_Init(&EXTI_InitStructure);
	
	//配置NVIC
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);          //选择22模式
	NVIC_InitTypeDef NVIC_InitStructure;
	NVIC_InitStructure.NVIC_IRQChannel=EXTI15_10_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
	NVIC_Init(&NVIC_InitStructure);

}

5.中断函数

特殊说明:中断函数不用在头文件中声明,因为中断函数是自动执行的!!!

void EXTI15_10_IRQHandler(void)
{
	if(EXTI_GetITStatus(EXTI_Line14)==SET)
	{
		EXTI_ClearITPendingBit(EXTI_Line14);            //清除中断标志位
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值