外部中止/事情我的了解是能够将单片机的IO口悉数设置为外部中止口,咱们能够依据触发哪个IO口中止,去履行相应的中止处理函数。这个其实很简略,51一般有2个外部中止口,而stm32将其扩展,每个IO口都能够作为外部中止口。
外部中止装备也很简略,只需要翻开相应的IO口装备,时钟,翻开stm32f10x_conf.h里的 #include “stm32f10x_exti.h” ,装备EXIT和中止处理函数即可。下面是简略的实例(根据3.0库):
void GPIO_Configuration(void)//装备GPIOC_5口作为外部中止口
{
GPIO_InitTypeDefGPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin= GPIO_Pin_5;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING ;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void EXTI_Configuration(void)
{
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_InitStructure.EXTI_Line = EXTI_Line5; //外部中止线
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中止形式
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//中止触发方法
EXTI_InitStructure.EXTI_LineCmd = ENABLE;//翻开中止
EXTI_Init(&EXTI_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource5); //挑选 GPIO管脚用作外部中止线路
}
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);// 抢占式优先等级
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;//指定中止源
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 指定呼应优先等级1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
//中止处理函数
void EXTI9_5_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line5) != RESET)
{
//增加中止处理程序
EXTI_CleaRFlag(EXTI_Line5);
EXTI_ClearITPendingBit(EXTI_Line5);
}
}
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/jishu/256518.html