打印
[N32G43x]

帮忙解决下GPIO的问题

[复制链接]
661|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
江门彦祖|  楼主 | 2022-11-29 08:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在使用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和滴答时钟在用

使用特权

评论回复
5
江门彦祖|  楼主 | 2022-11-29 15:09 | 只看该作者
sy12138 发表于 2022-11-29 11:36
无法输出的时候debug看一下GPIO寄存器

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

使用特权

评论回复
6
sy12138| | 2022-11-29 17:52 | 只看该作者
江门彦祖 发表于 2022-11-29 15:09
多谢,已经解决了,是因为使用了库函数的模式转换IIC端口转换为开漏输出的时候导致PA0输出了开漏。不知道 ...

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

使用特权

评论回复
7
江门彦祖|  楼主 | 2022-11-30 07:59 | 只看该作者
sy12138 发表于 2022-11-29 17:52
请问是哪个库函数,我看一下

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

使用特权

评论回复
8
sy12138| | 2022-11-30 09:31 | 只看该作者
江门彦祖 发表于 2022-11-30 07:59
原来的IIC接收应答信号是转换模式的,现在是直接读取信号了,已经取消了模式转换。
GPIO_Mode_Set(GPIOA, ...

好的,一般这种GPIO失效的问题还是先debug看GPIO配置有没有发生变化

使用特权

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

本版积分规则

3

主题

10

帖子

0

粉丝