一、EXTI配置
打通这一路的电路即可
GPIO ------》 AFIO ------》 EXTI -----》 NVIC
step1:打开RCC时钟
注意:RCC管的是外面的,NVIC住在皇宫里面,RCC管不着,可参照stm32f103c8t6芯片原
理图
step2:配置GPIO,输入模式
step3:AFIO,选择这一路的GPIO
注意:相同的pin不能同时申请中断如PA1和PB1
step4:配置EXTI,选择边沿触发方式or触发响应方式
step5:配置NVIC,给中断配置抢占优先级和响应优先级
1.打开RCC时钟
rcc.h
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
//使用
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE)
AFIO也在APB2上
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE)
2.配置GPIO,输入模式
/*GPIO初始化*/
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure); //将PA1和PA2引脚初始化为推挽输出
GPIO_Mode_AIN 模拟输入
。。。IN_FLOATING 浮空输入
。。。IPD 下拉输入
。。。IPU 上拉输入
。。。Out_OD 开漏输出
。。。Out_PP 推挽输出
。。。AF_OD 复用开漏输出
。。。AF_PP 复用推挽输出
推挽输出时:寄存器为1,输出1,为0,输出0
开漏输出时:寄存器为1,输出断开(高阻模式),为0,输出0
(作用:1.可作为通信协议输出,输出更高电平2.只需在IO口外接上拉电阻到5V )
库函数(gpio.h):
读取某引脚输入的电平(0为低,1为高)
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
读取整个输入寄存器的数据
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
读取某引脚输出的电平(0为低,1为高)
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
读取整个输出寄存器的数据
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
设为高电平
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
设为低电平
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
写某个引脚的数据
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
写数据
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
锁定引脚配置,放止意外修改
void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
引脚重映射
void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState);
配置AFIO数据选择器,选择要配置中断的引脚
void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
以太网相关
void GPIO_ETH_MediaInterfaceConfig(uint32_t GPIO_ETH_MediaInterface);
3.AFIO,选择这一路的GPIO
void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
选择GPIO pin作为外部中断线
GPIO_PortSource 要选择的GPIO pin
GPIO_PinSource 哪个引脚
以PB14为例:
GPIO_PortSourceGPIOB
GPIO_PinSource14
4.配置EXTI,选择边沿触发方式or触发响应方式
/*EXTI初始化*/
EXTI_InitTypeDef EXTI_InitStructure; //定义结构体变量
EXTI_InitStructure.EXTI_Line = EXTI_Line0 | EXTI_Line1; //选择配置外部中断的0号线和1号线
EXTI_InitStructure.EXTI_LineCmd = ENABLE; //指定外部中断线使能
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //指定外部中断线为中断模式
EXTI_Mode_Event事件模式
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //指定外部中断线为下降沿触发
Trigger_Rising上升沿
Trigger_Falling下降沿
Trigger_