#include "stm32f10x.h" // Device header
#include "led.h"
#include "Delay.h"
void CountSensor_Init(void)
{
GPIO_InitTypeDef GPIO_InitStrquyre;
EXTI_InitTypeDef EXTI_InitStrquyre;
NVIC_InitTypeDef NVIC_InitStrquyre;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //打开外设的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
GPIO_InitStrquyre.GPIO_Pin = GPIO_Pin_14; //GPIO配置
GPIO_InitStrquyre.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStrquyre.GPIO_Speed =GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStrquyre);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource14); //配置中断的引脚选择
EXTI_InitStrquyre.EXTI_Line = EXTI_Line14; //配置中断线
EXTI_InitStrquyre.EXTI_LineCmd =ENABLE ; //开启中断
EXTI_InitStrquyre.EXTI_Mode = EXTI_Mode_Interrupt; //中断模式
EXTI_InitStrquyre.EXTI_Trigger =EXTI_Trigger_Rising ; //触发方式:上升沿触发
EXTI_Init(&EXTI_InitStrquyre);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //配置中断分组,只分组一次
NVIC_InitStrquyre.NVIC_IRQChannel = EXTI15_10_IRQn; //用得MD的
NVIC_InitStrquyre.NVIC_IRQChannelCmd = ENABLE;
NVIC_InitStrquyre.NVIC_IRQChannelPreemptionPriority = 1; //抢占优先级
NVIC_InitStrquyre.NVIC_IRQChannelSubPriority = 1; //响应优先级
NVIC_Init(&NVIC_InitStrquyre);
}
void EXTI15_10_IRQHandler(void) //中断函数的名称是固定的,到启动文件里面去找
{
int i = 0;
if(EXTI_GetITStatus(EXTI_Line14) == SET) //判断中断来源
{
for(i = 0;i<20;i++)
{
LED_ON();
Delay_ms(200);
LED_OFF();
Delay_ms(200);
}
EXTI_ClearITPendingBit(EXTI_Line14); //清楚中断标志位
}
}
STM32标准库中断
最新推荐文章于 2024-05-07 17:20:55 发布