TI论坛
直播中

李滢芝

7年用户 229经验值
私信 关注
[问答]

请问用TM4C123GXL写按键PD7为什么给高还是低呢?

刚开始写按键,PD0和PD1都有问题。后面知道PD0和PB6是连到一起的,PD1和PB7是连到一起的,我们写液晶使用了PB6和PB7,所以有问题。
1.但是PD7为什么给高还是低呢?
2.我们发现如果把PD口作为输出口,程序会死在这句话。
GPIODirModeSet(GPIO_PORTD_BASE, GPIO_PIN_7 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3,GPIO_DIR_MODE_OUT);
如果把PD口作为输出口,程序会死在这句话,只有把pd口换成输入才不会死。这是为什么呀?

在dir之前是这样配置的。
         SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
         GPIOPadConfigSet(GPIO_PORTD_BASE, GPIO_PIN_2 | GPIO_PIN_3 |  GPIO_PIN_6|GPIO_PIN_7, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);
         GPIODirModeSet(GPIO_PORTD_BASE,  GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_6|GPIO_PIN_7,GPIO_DIR_MODE_IN);
按理说pd7应该是高电平,按键按下是低电平。但是pd7一直是低。
后面我把pd7换成pb5才把矩阵键盘写出来。

回帖(8)

苏笛笛

2018-8-14 07:42:07
TM4C123x 的PD7和PF0默认为NMI功能。
这些管脚在进行功能设置前需要解锁。例如对PD7:
HWREG(GPIO_PORTD_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY;
HWREG(GPIO_PORTD_BASE + GPIO_O_CR) = 0xFF;
之后就可以使用GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_7);配置为GPIO输出
然后就可以赋值了。
PF0一样处理。
举报

苏笛笛

2018-8-14 07:51:43
引用: Evawang 发表于 2018-8-14 07:42
TM4C123x 的PD7和PF0默认为NMI功能。
这些管脚在进行功能设置前需要解锁。例如对PD7:
HWREG(GPIO_PORTD_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY;

把GPIO解锁的逻辑贴出来吧,对照Datasheet和寄存器一看就明白了:
9.2.4 Commit Control
The GPIO commit control registers provide a layer of protection against accidental programming of
critical hardware peripherals. Protection is provided for the GPIO pins that can be used as the four
JTAG/SWD pins (PC[3:0])and the NMI pin (PD7 and PF0). Writes to protected bits of the GPIO
Alternate Function Select (GPIOAFSEL) register (see page 589), GPIO Pull Up Select (GPIOPUR)
register (see page 595), GPIO Pull-Down Select (GPIOPDR) register (see page 597), and GPIO
Digital Enable (GPIODEN) register (see page 600) are not committed to storage unless the GPIO
Lock (GPIOLOCK) register (see page 602) has been unlocked and the appropriate bits of the GPIO
Commit (GPIOCR) register (see page 603) have been set.
举报

李滢芝

2018-8-14 08:08:26
引用: Evawang 发表于 2018-8-14 07:42
TM4C123x 的PD7和PF0默认为NMI功能。
这些管脚在进行功能设置前需要解锁。例如对PD7:
HWREG(GPIO_PORTD_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY;

非常感谢。
那是不是也是因为PD7没有解锁,所以程序会死在那句话?
举报

李滢芝

2018-8-14 08:27:11
引用: Evawang 发表于 2018-8-14 07:51
把GPIO解锁的逻辑贴出来吧,对照Datasheet和寄存器一看就明白了:
9.2.4 Commit Control
The GPIO commit control registers provide a layer of protection against accidental programming of

非常感谢。
那是不是也是因为PD7没有解锁,所以程序会死在那句话?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分