关于STM32学习分享
第三章 EXIT外部中断
前言
单片机的按键配置为输入模式获取控制信号,触发EXIT外部中断。
一、按键GPIO输入模式类型
GPIO_Mode_IN_FLOATING = 0x04, // 浮空输入
说明:通常配置按键为浮空输入。
二、代码
1.exti.c
代码如下(示例):
#include "exti.h"
//NVIC中断优先级与中断源配置
static void Exti_Nvic_Config(void)
{
NVIC_InitTypeDef NVIC_Initstruct;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//配置优先级组
NVIC_Initstruct.NVIC_IRQChannel= EXTI0_IRQn;
NVIC_Initstruct.NVIC_IRQChannelPreemptionPriority=0;//抢占优先级
NVIC_Initstruct.NVIC_IRQChannelSubPriority= 1;//子优先级
NVIC_Initstruct.NVIC_IRQChannelCmd= ENABLE;//使能
NVIC_Init(&NVIC_Initstruct);
NVIC_Initstruct.NVIC_IRQChannel=EXTI15_10_IRQn;
NVIC_Initstruct.NVIC_IRQChannelPreemptionPriority=1;
NVIC_Initstruct.NVIC_IRQChannelSubPriority= 1;
NVIC_Initstruct.NVIC_IRQChannelCmd= ENABLE;
NVIC_Init(&NVIC_Initstruct);
}
void Exti_Key_Config(void)
{
//初始化结构体的定义
GPIO_InitTypeDef GPIO_Initstruct;
EXTI_InitTypeDef EXTI_Initstruct;
//中断优先级配置应用NVIC内核的外设,中断控制器
Exti_Nvic_Config();
//打开相应GPIO外设的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);
//以下分别是进行IO口的输入模式的设置
GPIO_Initstruct.GPIO_Pin=GPIO_Pin_0;
GPIO_Initstruct.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_Initstruct);
GPIO_Initstruct.GPIO_Pin=GPIO_Pin_13;
GPIO_Initstruct.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOC,&GPIO_Initstruct);
//开启AFIO寄存器时钟 AFIO 外部中断配置寄存器
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
//配置相应的中断线对应的IO口
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA|GPIO_PortSourceGPIOC, GPIO_PinSource0|GPIO_PinSource13);
//配置中断
EXTI_Initstruct.EXTI_Line= EXTI_Line0|EXTI_Line13;
EXTI_Initstruct.EXTI_Mode= EXTI_Mode_Interrupt;
EXTI_Initstruct.EXTI_Trigger= EXTI_Trigger_Rising;
EXTI_Initstruct.EXTI_LineCmd= ENABLE;//使能
EXTI_Init(&EXTI_Initstruct);
}
2.exti.h
代码如下(示例):
#ifndef _EXTI_H
#define _EXTI_H
#include "stm32f10x.h"
void Exti_Key_Config(void);
#endif /*_BSP_EXTI_H*/
3.stm32f10x_it.c
说明:以下为中断处理方法。
代码如下(示例):
#include "stm32f10x_it.h"
#include "bsp_led.h"
#include "bsp_exti.h"
//按键1中断IO_Pin0控制LED灯亮灭
void EXTI0_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line0)!=RESET)
{
/*灯亮*/
GPIO_ResetBits(LED1_GPIO_PORT,LED1_GPIO_PIN);
}
EXTI_ClearITPendingBit(EXTI_Line0);
}
4.main.c
代码如下(示例):
#include “stm32f10x.h”
#include “led.h”
#include “key.h”
#include “exti.h”
#define SOFT_DELAY Delay(0x0FFFFF)
void Delay(__IO u32 nCount);
int main(void)
{
LED_GPIO_Config();
KEY_GPIO_Config();//按键扫描
Exti_Key_Config();//按键中断
}
void Delay(__IO uint32_t nCount) //简单的延时函数
{
for(; nCount != 0; nCount–);
}
该处使用的url网络请求的数据。
@https://blog.csdn.net/FuYYZ/article/details/114345628