本帖最后由 Afanx 于 2023-1-3 15:10 编辑
N32MCU各系列的GPIO模块,N32G45x系列相较其他系列存在较大的差异。 本贴介绍除N32G45x的其他系列GPIO配置,适用于N32G43x/N32L4xx/N32G430/N32G03x。 这些系列的GPIO寄存器以及库函数配置基本相同。但N32G430的库函数代码命名风格稍有变化,其内容本质基本不变。 GPIO模块配置(一)【N32G45x】 https://bbs.21ic.com/icview-3276004-1-1.html
下列配置代码以N32G43x为例。
一、使能GPIO时钟 开启对应IO的时钟 RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA, ENABLE);
如果作为外设的复用IO,需要开启AFIO时钟 RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_AFIO , ENABLE);
(N32G430不同于其他系列,GPIO挂在AHB总线上)
二、配置GPIO模式 1、声明并初始化GPIO结构体变量 GPIO_InitType GPIO_InitStructure;
GPIO_InitStruct(&GPIO_InitStructure);
2、修改结构体变量参数 GPIO_InitStructure.Pin = GPIO_PIN_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pull = GPIO_No_Pull;
GPIO_InitStructure.GPIO_Alternate = GPIO_NO_AF;
GPIO_InitStructure.GPIO_Slew_Rate = GPIO_Slew_Rate_High;
GPIO_InitStructure.GPIO_Current = GPIO_DC_2mA;
3、初始化GPIO GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);
其中GPIO Mode可配的参数如下(6种模式): 普通输入 普通输出(推挽、开漏) 复用输出(推挽、开漏) 模拟输入 typedef enum
{
GPIO_Mode_Input = 0x00000000, /*!< Input Floating Mode */
GPIO_Mode_Out_PP = 0x00000001, /*!< Output Push Pull Mode */
GPIO_Mode_Out_OD = 0x00000011, /*!< Output Open Drain Mode */
GPIO_Mode_AF_PP = 0x00000002, /*!< Alternate Function Push Pull Mode */
GPIO_Mode_AF_OD = 0x00000012, /*!< Alternate Function Open Drain Mode */
GPIO_Mode_Analog = 0x00000003, /*!< Analog Mode */
/* 忽略EXTI的模式配置 */
}GPIO_ModeType;
不同于N32G45x,其他系列的上下拉不需要绑定普通输入模式,可单独配置。 GPIO_Pull参数如下:浮空、上拉、下拉 typedef enum
{
GPIO_No_Pull = 0x00000000, /*!< No Pull-up or Pull-down activation */
GPIO_Pull_Up = 0x00000001, /*!< Pull-up activation */
GPIO_Pull_Down = 0x00000002 /*!< Pull-down activation */
}GPIO_PuPdType;
GPIO_Alternate是配置每个IO的复用功能,后面详细说明。 GPIO_Slew_Rate参数如下: typedef enum
{
GPIO_Slew_Rate_High = 0,
GPIO_Slew_Rate_Low
} GPIO_SpeedType;
GPIO_Current参数如下: typedef enum
{
GPIO_DC_2mA = 0x00,
GPIO_DC_4mA = 0x10,
GPIO_DC_8mA = 0x01,
GPIO_DC_12mA= 0x11
}GPIO_CurrentType;
(N32G03x系列DC不区分多少mA,只有DC_HIGH和DC_LOW)
GPIO寄存器:
三、GPIO复用功能 除了N32G45x系列,其他系列(N32G43x/N32L4xx/N32G430/N32G03x)的可单独为每一个GPIO配置复用功能,不需要按组分配。 相对于的就是多了GPIOx_AFL/GPIOx_AFH寄存器。根据5.2.5复用功能章节查询对应模块的复用功能配置。 比如,想配置PA9为TIM2的CH2通道,只需要配置GPIO_Alternate为GPIO_AF2_TIM1即可: GPIO_InitStructure.GPIO_Alternate = GPIO_AF2_TIM1;
四、外设的IO配置 同样,当不确定某个外设功能引脚该配置什么模式时,查看5.2.6外设的IO配置即可。比如:
|