江门彦祖 发表于 2022-11-29 08:06

帮忙解决下GPIO的问题

在使用GPIOA0-A7端口驱动TFT,在初始化完成后,GPIOA0脚位无法输出信号,在每次的写指令之前需要重新配置GPIO的模式。TFT是GC9306,MCU是N32G430C8L7,初始化代码如下。


#define        TFT_DATA_PORT(DATA)       GPIOA->PBC |= 0x00ff; GPIOA->PBSC |= DATA ;//PA0-PA7

#define                TFT_RESET_H                GPIO_Pins_Set(GPIOC,GPIO_PIN_13)//PC13       
#define                TFT_RESET_L                GPIO_Pins_Reset(GPIOC,GPIO_PIN_13)
#define                TFT_RS_H                GPIO_Pins_Set(GPIOD,GPIO_PIN_14)                //PF0
#define                TFT_RS_L                GPIO_Pins_Reset(GPIOD,GPIO_PIN_14)
#define                TFT_WR_H                GPIO_Pins_Set(GPIOD,GPIO_PIN_15)                //PF1                                                                                                               
#define                TFT_WR_L                GPIO_Pins_Reset(GPIOD,GPIO_PIN_15)

#define                TFT_CS_A_H                GPIO_Pins_Set(GPIOC,GPIO_PIN_14)        //PC14
#define                TFT_CS_A_L                GPIO_Pins_Reset(GPIOC,GPIO_PIN_14)

#define                TFT_BL_A_ON                GPIO_Pins_Reset(GPIOB,GPIO_PIN_0)//PB0
#define                TFT_BL_A_OFF        GPIO_Pins_Set(GPIOB,GPIO_PIN_0)

#define                INIT_TFT_BUS                                                                                                \
{                                                                                                                                                \
       GPIO_InitType GPIO_InitStructure;                                        \
                                                                                                                        \
        RCC_AHB_Peripheral_Clock_Enable(RCC_AHB_PERIPH_GPIOA | RCC_AHB_PERIPH_GPIOB | RCC_AHB_PERIPH_GPIOC | RCC_AHB_PERIPH_GPIOD);                \
                \
        GPIO_Structure_Initialize(&GPIO_InitStructure); \
        GPIO_InitStructure.Pin          =GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 |   \
                                                                                                                                                        GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 ;        \
        GPIO_InitStructure.GPIO_Slew_Rate = GPIO_SLEW_RATE_SLOW;        \
        GPIO_InitStructure.GPIO_Current = GPIO_DS_4MA;        \
        GPIO_InitStructure.GPIO_Mode    = GPIO_MODE_OUT_PP;                        \
        GPIO_Peripheral_Initialize(GPIOA, &GPIO_InitStructure);                                \
        GPIO_InitStructure.Pin          = GPIO_PIN_0;   \
        GPIO_Peripheral_Initialize(GPIOB, &GPIO_InitStructure);                                \
        GPIO_InitStructure.Pin          = GPIO_PIN_15 | GPIO_PIN_14;   \
        GPIO_Peripheral_Initialize(GPIOD, &GPIO_InitStructure);                                \
        GPIO_InitStructure.Pin          = GPIO_PIN_13 | GPIO_PIN_14;   \
        GPIO_Peripheral_Initialize(GPIOC, &GPIO_InitStructure);                                \
}

江门彦祖 发表于 2022-11-29 09:46

补充:
是PA0无法输出高电平,是在进入大循环的时候就会出现这种情况

sy12138 发表于 2022-11-29 11:36

无法输出的时候debug看一下GPIO寄存器

江门彦祖 发表于 2022-11-29 14:10

sy12138 发表于 2022-11-29 11:36
无法输出的时候debug看一下GPIO寄存器

在debug可以看到GPIO_POTYPE变为了开漏输出。我的中断也就只有外部中断线6和滴答时钟在用

江门彦祖 发表于 2022-11-29 15:09

sy12138 发表于 2022-11-29 11:36
无法输出的时候debug看一下GPIO寄存器

多谢,已经解决了,是因为使用了库函数的模式转换IIC端口转换为开漏输出的时候导致PA0输出了开漏。不知道是不是库函数的模式函数不适合直接调用。

sy12138 发表于 2022-11-29 17:52

江门彦祖 发表于 2022-11-29 15:09
多谢,已经解决了,是因为使用了库函数的模式转换IIC端口转换为开漏输出的时候导致PA0输出了开漏。不知道 ...

请问是哪个库函数,我看一下

江门彦祖 发表于 2022-11-30 07:59

sy12138 发表于 2022-11-29 17:52
请问是哪个库函数,我看一下

原来的IIC接收应答信号是转换模式的,现在是直接读取信号了,已经取消了模式转换。
GPIO_Mode_Set(GPIOA,GPIO_MODE_OUT_OD,GPIO_PIN_8)

sy12138 发表于 2022-11-30 09:31

江门彦祖 发表于 2022-11-30 07:59
原来的IIC接收应答信号是转换模式的,现在是直接读取信号了,已经取消了模式转换。
GPIO_Mode_Set(GPIOA, ...

好的,一般这种GPIO失效的问题还是先debug看GPIO配置有没有发生变化
页: [1]
查看完整版本: 帮忙解决下GPIO的问题