打印
[N32G43x]

GPIO模块配置(二)【除N32G45x外其他系列】

[复制链接]
533|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Afanx|  楼主 | 2023-1-3 15:02 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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配置即可。比如:

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

51

帖子

2

粉丝