GPIO库函数
写程序之前我们得先了解相关的GPIO配置函数
1.void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
作用:初始化一个或者多个IO口(同一组)的工作方式和速度。
参数: 1.GPIOx,GPIO的分组,如 GPIOA,GPIOB,GPIOC等的宏定义。
2.GPIO_InitStruct,GPIO的初始化相关结构体。该结构体里的成员变量决定了我们具体的初始化参数。以下进行说明:
GPIO_Pin:指定具体的io脚,如GPIO_Pin_0,GPIO_Pin_1这样的宏定义。
GPIO_Mode:指定GPIO的模式,有四种模式:
GPIO_Speed:指定IO最快翻转速度,也就是当使用IO产生频率(如PWM)的最大速度。有四种模式:
注意:当某管脚设置为上拉或者下拉输入模式,使用寄存器 Px_BSRR 和 PxBRR
GPIO_Mode 允许同时设置 GPIO 方向(输入/输出)和对应的输入/输出设置, :位[7:4]对应 GPIO 方向,位[4:0]对应配置。 GPIO 方向有如下索引
- GPIO 输入模式 = 0x00
- GPIO 输出模式 = 0x01
下图 给出了所有 GPIO_Mode 的索引和编码
举例:
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
2.GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct)
GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct)
是一个用于初始化 GPIO_InitTypeDef
结构体成员的函数。这个函数通常用于将结构体成员设置为默认值,确保在配置GPIO端口之前,各个字段都被正确初始化。以下是这个函数的定义及其解释:
函数定义
void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct)
{
/* Reset GPIO init structure parameters values */
GPIO_InitStruct->GPIO_Pin = GPIO_Pin_All;
GPIO_InitStruct->GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStruct->GPIO_Mode = GPIO_Mode_IN_FLOATING;
}
详细解释
-
GPIO_Pin_All
:- 将
GPIO_InitStruct
的GPIO_Pin
成员设置为GPIO_Pin_All
,表示默认情况下初始化所有GPIO引脚。GPIO_Pin_All
通常是一个宏定义,表示所有引脚的掩码值(例如0xFFFF)。
- 将
-
GPIO_Speed_2MHz
:- 将
GPIO_InitStruct
的GPIO_Speed
成员设置为GPIO_Speed_2MHz
,表示GPIO引脚的默认速度为2MHz。速度选项通常包括 2MHz, 10MHz, 和 50MHz。
- 将
-
GPIO_Mode_IN_FLOATING
:- 将
GPIO_InitStruct
的GPIO_Mode
成员设置为GPIO_Mode_IN_FLOATING
,表示默认情况下GPIO引脚为浮动输入模式
- 将
3.GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
是一个用于读取指定引脚电平状态的函数。这个函数通常用于检查某个特定引脚的输入电平是高电平(逻辑1)还是低电平(逻辑0)。
函数定义和解释
以下是 GPIO_ReadInputDataBit
函数的定义及其解释:
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
uint8_t bitstatus = 0x00;
if ((GPIOx->IDR & GPIO_Pin) != (uint32_t)Bit_RESET)
{
bitstatus = (uint8_t)Bit_SET;
}
else
{
bitstatus = (uint8_t)Bit_RESET;
}
return bitstatus;
}
详细解释
-
参数:
GPIOx
:指向GPIO端口基地址的指针。可以是GPIOA
,GPIOB
,GPIOC
,GPIOD
,GPIOE
,GPIOF
, 或GPIOG
。GPIO_Pin
:要读取的引脚编号。可以是GPIO_Pin_0
,GPIO_Pin_1
, ...,GPIO_Pin_15
。这些通常是宏定义,用于指定具体的引脚。
-
返回值:
- 函数返回
uint8_t
类型的值,表示引脚的电平状态:Bit_SET
:引脚电平为高电平(逻辑1)。Bit_RESET
:引脚电平为低电平(逻辑0)。
- 函数返回
-
工作原理:
- 读取指定GPIO端口的输入数据寄存器(IDR)。
- 使用按位与运算(
&
)检查IDR
中对应引脚的位是否被置位。 - 如果对应位被置位,则返回
Bit_SET
(高电平);否则,返回Bit_RESET
(低电平)。
使用示例
下面是一个使用 GPIO_ReadInputDataBit
函数读取某个GPIO引脚状态的示例:
#include "stm32f10x_gpio.h"
int main(void)
{
// 假设我们需要读取 GPIOA 的 Pin 0 的状态
GPIO_InitTypeDef GPIO_InitStructure;
// 使能 GPIOA 时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
// 配置 GPIOA Pin 0 为输入模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; // 速度在输入模式下无关紧要
GPIO_Init(GPIOA, &GPIO_InitStructure);
while (1)
{
// 读取 GPIOA Pin 0 的状态
uint8_t pinState = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0);
// 根据 pinState 执行相应的操作
if (pinState == Bit_SET)
{
// Pin 0 是高电平
}
else
{
// Pin 0 是低电平
}
}
}
总结
GPIO_ReadInputDataBit
函数用于读取指定GPIO引脚的电平状态,返回该引脚是高电平还是低电平。通过这个函数,可以方便地监控GPIO引脚的输入信号状态,用于各种输入检测和控制应用。
4.GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
是一个用于读取指定引脚的输出数据状态的函数。这个函数用于检查某个特定引脚的输出电平是高电平(逻辑1)还是低电平(逻辑0)。
函数定义和解释
以下是 GPIO_ReadOutputDataBit
函数的定义及其解释:
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
uint8_t bitstatus = 0x00;
if ((GPIOx->ODR & GPIO_Pin) != (uint32_t)Bit_RESET)
{
bitstatus = (uint8_t)Bit_SET;
}
else
{
bitstatus = (uint8_t)Bit_RESET;
}
return bitstatus;
}
详细解释
-
参数:
GPIOx
:指向GPIO端口基地址的指针。可以是GPIOA
,GPIOB
,GPIOC
,GPIOD
,GPIOE
,GPIOF
, 或GPIOG
。GPIO_Pin
:要读取的引脚编号。可以是GPIO_Pin_0
,GPIO_Pin_1
, ...,GPIO_Pin_15
。这些通常是宏定义,用于指定具体的引脚。
-
返回值:
- 函数返回
uint8_t
类型的值,表示引脚的输出电平状态:Bit_SET
:引脚电平为高电平(逻辑1)。Bit_RESET
:引脚电平为低电平(逻辑0)。
- 函数返回
-
工作原理:
- 读取指定GPIO端口的输出数据寄存器(ODR)。
- 使用按位与运算(
&
)检查ODR
中对应引脚的位是否被置位。 - 如果对应位被置位,则返回
Bit_SET
(高电平);否则,返回Bit_RESET
(低电平)。
使用示例
下面是一个使用 GPIO_ReadOutputDataBit
函数读取某个GPIO引脚输出状态的示例:
#include "stm32f10x_gpio.h"
int main(void)
{
// 假设我们需要读取 GPIOA 的 Pin 0 的输出状态
GPIO_InitTypeDef GPIO_InitStructure;
// 使能 GPIOA 时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
// 配置 GPIOA Pin 0 为推挽输出模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 设置 GPIOA Pin 0 输出高电平
GPIO_SetBits(GPIOA, GPIO_Pin_0);
while (1)
{
// 读取 GPIOA Pin 0 的输出状态
uint8_t pinState = GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_0);
// 根据 pinState 执行相应的操作
if (pinState == Bit_SET)
{
// Pin 0 输出高电平
}
else
{
// Pin 0 输出低电平
}
}
}
总结
GPIO_ReadOutputDataBit
函数用于读取指定GPIO引脚的输出电平状态,返回该引脚是高电平还是低电平。通过这个函数,可以方便地监控GPIO引脚的输出信号状态,用于各种输出控制和状态监测应用。
5.GPIO_SetBits(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
GPIO_SetBits(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
是一个用于将指定的 GPIO 引脚设置为高电平(逻辑1)的函数。这个函数在 STM32 库中非常常用,用于设置某个或多个 GPIO 引脚的输出状态。
函数定义和解释
以下是 GPIO_SetBits
函数的定义及其解释:
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
GPIOx->BSRR = GPIO_Pin;
}
详细解释
-
参数:
GPIOx
:指向 GPIO 端口基地址的指针。可以是GPIOA
,GPIOB
,GPIOC
,GPIOD
,GPIOE
,GPIOF
, 或GPIOG
。GPIO_Pin
:要设置的引脚编号。可以是GPIO_Pin_0
,GPIO_Pin_1
, ...,GPIO_Pin_15
。这些通常是宏定义,用于指定具体的引脚。
-
工作原理:
- 函数通过将指定引脚的位设置到端口的位设置/位重置寄存器(BSRR)中来将引脚设置为高电平。
BSRR
寄存器用于同时控制 GPIO 端口的多个引脚。写入BSRR
的低 16 位会将相应的引脚设置为高电平,写入高 16 位会将相应的引脚设置为低电平。
使用示例
下面是一个使用 GPIO_SetBits
函数设置某个 GPIO 引脚为高电平的示例:
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
void ConfigureGPIO(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
// 使能 GPIOA 时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
// 配置 GPIOA Pin 0 为推挽输出模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
int main(void)
{
// 配置 GPIO
ConfigureGPIO();
while (1)
{
// 设置 GPIOA Pin 0 输出高电平
GPIO_SetBits(GPIOA, GPIO_Pin_0);
// 延时
for (int i = 0; i < 1000000; i++);
// 设置 GPIOA Pin 0 输出低电平
GPIO_ResetBits(GPIOA, GPIO_Pin_0);
// 延时
for (int i = 0; i < 1000000; i++);
}
}
总结
GPIO_SetBits
函数用于将指定 GPIO 引脚设置为高电平(逻辑1)。通过这个函数,可以方便地控制 GPIO 引脚的输出状态,用于各种控制和状态指示应用。
6.GPIO_ResetBits(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
和上述的GPIO_SetBits差不多,只不过GPIO_ResetBits是将io口设置为低电平。
7.GPIO_WriteBit(GPIO_TypeDef* GPIOx, u16 GPIO_Pin, BitAction BitVal)
GPIO_WriteBit(GPIO_TypeDef* GPIOx, u16 GPIO_Pin, BitAction BitVal)
是一个用于设置指定 GPIO 引脚输出值的函数。这个函数通常在嵌入式系统开发中使用,特别是在 STM32 系列微控制器的 HAL(硬件抽象层)库中常见。
函数的定义和解释如下:
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal)
{
if (BitVal != Bit_RESET)
{
GPIOx->BSRR = GPIO_Pin;
}
else
{
GPIOx->BRR = GPIO_Pin;
}
}
详细解释:
- GPIOx:指向 GPIO 端口基地址的指针,可以是 GPIOA、GPIOB 等。
- GPIO_Pin:要设置的引脚编号,可以是
GPIO_Pin_0
到GPIO_Pin_15
等具体的宏定义。 - BitVal:要写入的引脚状态,是一个枚举类型
BitAction
,通常有两个值:Bit_RESET
表示将引脚设置为低电平(逻辑 0)。Bit_SET
表示将引脚设置为高电平(逻辑 1)。
工作原理:
- 函数根据
BitVal
的值来决定将 GPIO 端口的 BSRR(位设置/位重置寄存器)或者 BRR(位复位寄存器)寄存器写入,来设置或者复位指定的引脚。- 如果
BitVal
不等于Bit_RESET
,则将GPIO_Pin
设置到 BSRR 寄存器中,使得对应引脚设置为高电平。 - 否则,将
GPIO_Pin
设置到 BRR 寄存器中,使得对应引脚设置为低电平。
- 如果
使用示例:
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
void ConfigureGPIO(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
// 使能 GPIOA 时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
// 配置 GPIOA Pin 0 为推挽输出模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
int main(void)
{
// 配置 GPIO
ConfigureGPIO();
while (1)
{
// 设置 GPIOA Pin 0 输出高电平
GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET);
// 延时
for (int i = 0; i < 1000000; i++);
// 设置 GPIOA Pin 0 输出低电平
GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET);
// 延时
for (int i = 0; i < 1000000; i++);
}
}
在这个示例中,首先配置了 GPIOA 的 Pin 0 为推挽输出模式,然后在主循环中交替使用 GPIO_WriteBit
函数将 GPIOA 的 Pin 0 设置为高电平和低电平,并通过延时产生可见的状态变化。
8.GPIO_Write(GPIO_TypeDef* GPIOx, u16 PortVal)
GPIO_Write(GPIO_TypeDef* GPIOx, u16 PortVal)
是一个用于同时设置指定 GPIO 端口的所有引脚状态的函数。在 STM32 系列的 HAL(硬件抽象层)库中,这样的函数通常用于一次性设置整个 GPIO 端口的输出状态。
函数的定义和解释如下:
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)
{
GPIOx->ODR = PortVal;
}
详细解释:
- GPIOx:指向 GPIO 端口基地址的指针,可以是 GPIOA、GPIOB 等。
- PortVal:要写入的值,是一个 16 位的整数,表示要设置的 GPIO 端口的输出状态。每一位对应 GPIO 端口的一个引脚,例如
0x0001
表示第一个引脚设置为高电平,0x0000
表示所有引脚设置为低电平。
工作原理:
- 函数将
PortVal
的值直接写入 GPIO 端口的输出数据寄存器(ODR),从而同时设置整个 GPIO 端口的输出状态。 - 每一位
PortVal
对应 GPIO 端口的一个引脚,该引脚的状态会根据PortVal
中的对应位设置为高电平或者低电平。
使用示例:
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
void ConfigureGPIO(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
// 使能 GPIOA 时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
// 配置 GPIOA 的引脚为推挽输出模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
int main(void)
{
// 配置 GPIO
ConfigureGPIO();
while (1)
{
// 设置 GPIOA 所有引脚输出高电平
GPIO_Write(GPIOA, 0xFFFF);
// 延时
for (int i = 0; i < 1000000; i++);
// 设置 GPIOA 所有引脚输出低电平
GPIO_Write(GPIOA, 0x0000);
// 延时
for (int i = 0; i < 1000000; i++);
}
}
在这个示例中,首先配置了 GPIOA 的所有引脚为推挽输出模式,然后在主循环中交替使用 GPIO_Write
函数设置 GPIOA 的所有引脚为高电平和低电平,并通过延时产生可见的状态变化。
9.GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
是一个用于锁定指定 GPIO 引脚的配置寄存器的函数。在 STM32 系列的 HAL(硬件抽象层)库中,这个函数通常用于保护已经配置好的 GPIO 引脚设置,防止被意外或恶意修改。
函数的定义和解释如下:
void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
uint32_t tmp = GPIO_Pin;
// 锁定引脚
GPIOx->LCKR = tmp | GPIO_LCKR_LCK;
// 再次写入以确认锁定
GPIOx->LCKR = tmp;
// 再次读取确认锁定状态
tmp = GPIOx->LCKR;
// 再次写入以解锁
GPIOx->LCKR = GPIO_Pin;
}
详细解释:
- GPIOx:指向 GPIO 端口基地址的指针,可以是 GPIOA、GPIOB 等。
- GPIO_Pin:要锁定的引脚编号,可以是
GPIO_Pin_0
到GPIO_Pin_15
等具体的宏定义。
工作原理:
- 函数通过对 GPIO 端口的锁定控制寄存器(LCKR)进行特定的写入操作来锁定或解锁指定的引脚。
- 这个函数通常用于在配置 GPIO 引脚之后,通过锁定操作来确保引脚配置不被修改,提高系统的稳定性和安全性。
- 锁定操作涉及多次写入和读取 LCKR 寄存器,以确认锁定或解锁状态。
注意事项:
- 锁定后的引脚配置无法再被修改,直到系统复位或者进行特定的解锁操作。
- 这个函数在使用时应该小心谨慎,确保正确理解和使用锁定功能,避免意外导致的引脚配置问题。
这个函数通常在需要保护 GPIO 引脚配置不被修改的场景下使用,如在特定配置完成后调用以确保不会意外改变引脚的功能或状态
10.GPIO_PinRemapConfig(u32 GPIO_Remap, FunctionalState NewState)
端口重映射后面详细介绍。
11.GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)
GPIO_EXTILineConfig
函数通常用于配置外部中断线(External Interrupt Line)与 GPIO 引脚的映射关系。在许多微控制器中,外部中断可以通过配置来映射到不同的 GPIO 引脚,这为处理外部事件(如按钮按下、传感器触发等)提供了灵活性。
函数定义和解释
void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
参数说明:
GPIO_PortSource
:指定的 GPIO 端口源,用于指定要映射到外部中断线的 GPIO 端口。GPIO_PinSource
:指定的 GPIO 引脚源,用于指定要映射到外部中断线的具体 GPIO 引脚。
工作原理:
该函数的主要作用是将指定的 GPIO 引脚映射到外部中断线。在一些微控制器中,外部中断线有多个,可以通过配置来选择连接到哪个 GPIO 引脚,从而允许系统在外部事件发生时触发中断处理函数。
使用示例:
以下是一个示例,展示如何使用 GPIO_EXTILineConfig
函数来配置外部中断线与 GPIO 引脚的映射关系:
#include "stm32f10x_gpio.h"
#include "stm32f10x_exti.h"
void ConfigureExternalInterrupt(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStruct;
NVIC_InitTypeDef NVIC_InitStruct;
// 使能 GPIO 时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
// 配置 GPIOA Pin 0 为输入模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; // 下拉输入模式
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 配置外部中断线 0(对应 GPIOA Pin 0)
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
// 配置外部中断线 0 的触发方式
EXTI_InitStruct.EXTI_Line = EXTI_Line0;
EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising; // 上升沿触发
EXTI_InitStruct.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStruct);
// 配置外部中断中断优先级
NVIC_InitStruct.NVIC_IRQChannel = EXTI0_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0x00;
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0x00;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStruct);
}
// 外部中断 0 的中断处理函数
void EXTI0_IRQHandler(void)
{
if (EXTI_GetITStatus(EXTI_Line0) != RESET)
{
// 处理外部中断事件
// 清除中断标志
EXTI_ClearITPendingBit(EXTI_Line0);
}
}
int main(void)
{
// 配置外部中断
ConfigureExternalInterrupt();
while (1)
{
// 主应用程序循环
}
}
解释和注意事项:
-
配置 GPIO 和外部中断:在
ConfigureExternalInterrupt
函数中,首先配置了 GPIOA Pin 0 作为输入模式,并将其配置到外部中断线 0。 -
配置外部中断触发方式:使用
EXTI_InitStruct
结构体配置了外部中断线 0 的触发方式,例如在上升沿触发时执行中断处理。 -
中断处理函数:定义了
EXTI0_IRQHandler
函数作为外部中断 0 的中断处理函数,在该函数中可以处理外部中断触发时的操作。 -
注意事项:具体的配置和操作依赖于使用的硬件平台和具体的微控制器型号,需要参考相应的芯片手册和开发板资料进行适当的调整和配置。
通过以上示例,希望能够帮助你理解 GPIO_EXTILineConfig
函数的作用和用法,以及外部中断与 GPIO 引脚的映射配置。
电路连接
如图发光二极管的正极连接到3.3v,我们如果需要电亮led的话,只需拉低另外一段的电压就行。
程序:
首先我们可以配置GPIO口,然后用GPIO_SetBits将io拉高,然后我们到主程序里面拉低。
我们拉低对应引脚就可以点亮了。