二,软件配置中断
以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);
- }
|