新闻中心

EEPW首页>嵌入式系统>设计应用> STM32学习笔记——外部中断EXTI

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

作者: 时间:2016-11-28 来源:网络 收藏

//配置按钮中断线触发方式设置中断配置结构体成员

EXTI_InitStructure.EXTI_Line=EXTI_Line6;//选择外部中断线EXTI_Line0~EXTI_Line18共19根线

EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;//设置为中断请求,可以为EXTI_Mode_Interrupt中断请求或者

//EXTI_Mode_Event事件请求

EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//触发方式下降沿触发还可以为EXTI_Trigger_Rising上升沿触发或者

//EXTI_Trigger_Rising_Falling上升沿下降沿触发

EXTI_InitStructure.EXTI_LineCmd=ENABLE;//中断线使能ENABLE使能,DISABLE失能

EXTI_Init(&EXTI_InitStructure);//根据参数结构体初始化EXTI中断

EXTI_GenerateSWInterrupt(EXTI_Line6);//产生一个软件中断EXTI_Line6中断允许

//到此中断配置完成,可以写中断处理函数。

while(1)

{

}

}

voidRCC_Configuration(void)

{

//复位RCC外部设备寄存器到默认值

RCC_DeInit();

//打开外部高速晶振

RCC_HSEConfig(RCC_HSE_ON);

//等待外部高速时钟准备好

HSEStartUpStatus=RCC_WaitForHSEStartUp();

//外部高速时钟已经准别好

if(HSEStartUpStatus==SUCCESS)

{

FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

FLASH_SetLatency(FLASH_Latency_2);

//配置AHB(HCLK)时钟=SYSCLK

RCC_HCLKConfig(RCC_SYSCLK_Div1);

//配置APB2(PCLK2)钟=AHB时钟

RCC_PCLK2Config(RCC_HCLK_Div1);

//配置APB1(PCLK1)钟=AHB1/2时钟

RCC_PCLK1Config(RCC_HCLK_Div2);

//配置ADC时钟=PCLK21/4

RCC_ADCCLKConfig(RCC_PCLK2_Div4);

//配置PLL时钟==外部高速晶体时钟*98MHz*9MHz=72MHz

RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);

//配置ADC时钟=PCLK2/4

RCC_ADCCLKConfig(RCC_PCLK2_Div4);

//使能PLL时钟

RCC_PLLCmd(ENABLE);

//等待PLL时钟就绪

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET)

{

}

//配置系统时钟=PLL时钟

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

//检查PLL时钟是否作为系统时钟

while(RCC_GetSYSCLKSource()!=0x08)

{

}

}

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB

|RCC_APB2Periph_AFIO,ENABLE);

//使能GPIOA,GPIOB和AFIO的APB2

}

voidGPIO_Configuration(void)

{

GPIO_InitTypeDefGPIO_InitStructure;//定义配置GPIO的结构体

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;//选中第8个脚

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出

GPIO_Init(GPIOB,&GPIO_InitStructure);//用配置好的结构体初始化GPIOBPB8用于驱动led

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;//选中6脚

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//配置浮空输入

GPIO_Init(GPIOB,&GPIO_InitStructure);//初始化GPIOBPB6脚连接外部中断线6的中断源

//所有的端口都有外部中断的能力,为了使用外部中断线,端口必须配置为输入模式

}



评论


技术专区

关闭