二,软件配置中断
以A0为例配置外部中断,总共有如下步骤,1.打开外设时钟和系统配置时钟,2.初始化GPIO口
3.连接中断线 4.配置外部中断0 (EXTI_Mode有两种模式一种是中断模式,一种是事件模式。这里选中断模式)5.配置中断优先级。6.写中断服务函数。
// 初始化按键(外部中断)
void KEY_EXTI_Init(void)
{
/* 1.打开外设时钟(为了低功耗,需要分别打开) */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
/* 打开系统配置时钟 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
/* 2.配置PA0,并初始化 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // 引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; // 模式:输入模式
//GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; // 输出类型(输入模式下,无效)
//GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; // 端口速率(输入模式下,无效)
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; // 上下拉选择:浮空
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* 3. PA0连接中断线0 */
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);
/* 4.配置外部中断0 */
EXTI_InitStructure.EXTI_Line = EXTI_Line0; // 中断0
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; // 中断模式
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; // 下降沿触发(按键按下)
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
/* 5.配置外部中断0的优先级 */
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //中断通道配置
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
|