Afanx 发表于 2023-1-3 11:18

GPIO模块配置(一)【N32G45x】

本帖最后由 Afanx 于 2023-1-3 15:10 编辑

N32MCU各系列的GPIO模块,N32G45x系列相较其他系列存在较大的差异。本贴介绍N32G45x系列的GPIO配置,其他系列参考 :GPIO模块配置(二)【除N32G45x外其他系列】https://bbs.21ic.com/icview-3276040-1-1.html
一、使能GPIO时钟 开启对应IO的时钟RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA, ENABLE);如果作为外设的复用IO,需要开启AFIO时钟RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_AFIO , ENABLE);二、配置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_Speed = GPIO_Speed_50MHz;3、初始化GPIOGPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);N32G45x系列GPIO初始化配置只需要GPIO_Mode和GPIO_Speed参数。其中GPIO Mode可配的参数如下(8种模式):模拟输入普通输入(浮空、上拉、下拉)普通输出(推挽、开漏)复用输出(推挽、开漏)typedef enum
{
    GPIO_Mode_AIN         = 0x0,
    GPIO_Mode_IN_FLOATING = 0x04,
    GPIO_Mode_IPD         = 0x28,
    GPIO_Mode_IPU         = 0x48,
    GPIO_Mode_Out_OD      = 0x14,
    GPIO_Mode_Out_PP      = 0x10,
    GPIO_Mode_AF_OD       = 0x1C,
    GPIO_Mode_AF_PP       = 0x18
} GPIO_ModeType;其中GPIO_Speed可配的参数如下:typedef enum
{
    GPIO_INPUT      = 0,
    GPIO_Speed_2MHz = 1,
    GPIO_Speed_10MHz,
    GPIO_Speed_50MHz
} GPIO_SpeedType;GPIO寄存器:可以看到GPIO寄存器初始化时只需要配置,在该寄存器中可以配置全部可能的8种模式。因此调用 GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure); 实际上只修改了寄存器。
三、配置复用功能重映射N32G45x的GPIO复用功能是按组进行复用或重映射的。(复用映射组参考用户手册7.2.5章节)调用以下库函数进行GPIO复用功能重映射GPIO_ConfigPinRemap(GPIO_RMP_SPI1, ENABLE);这里有一点需要注意的是开启GPIO复用功能模式后,存在默认映射,不一定需要开启重映射!
当默认连接不满足时,才使用GPIO_ConfigPinRemap()函数进行重映射。

比如当使用PC0、PC1作为I2C3的功能引脚时,只需要开启复用功能即可,不需要使用GPIO_ConfigPinRemap()重映射。如果使用PF4、PF5作为I2C3的功能引脚,调用GPIO_ConfigPinRemap(GPIO_RMP2_I2C3, ENABLE)进行重映射。如果使用PC4、PC5作为I2C3的功能引脚,调用GPIO_ConfigPinRemap(GPIO_RMP3_I2C3, ENABLE)进行重映射。
四、作为外功能引脚,该配置为推挽模式还是开漏模式、配置浮空输入还是上拉输入?很多朋友不清楚什么情况下配置推挽或开漏输出。比如作为I2C功能引脚时,该配置为复用功能开漏输出,还是复用功能推挽输出?在用户手册7.2.6 外设的IO配置给出了答案。
该章节给出了所有外设使用IO时的配置模式建议。再比如下面USART的配置建议。

页: [1]
查看完整版本: GPIO模块配置(一)【N32G45x】