转 一次“习惯”造成的错误
错误描述 客户通过LPCXpresso4367开发板进行项目开发前的学习,实现一个特简单的功能:P1.5输出低电平,使用的是LPCOpen软件包提供的函数,调用的函数代码如下,但结果是P1.5始终保持高电平。 Chip_SCU_PinMuxSet(0x1, 5, (SCU_MODE_FUNC0)); //P1.5 引脚设为GPIO功能
Chip_GPIO_SetPinDIROutput(LPC_GPIO_PORT, 0x1, 5);//P1.5 GPIO设为输出
Chip_GPIO_SetPinState(LPC_GPIO_PORT, 0x1, 5, false);// P1.5 GPIO输出低电平
| Ø错误分析 咋看代码,函数调用和参数选择都没有任何差错,但在仔细对照参考手册后,发现了错误的原因,下图为LPC43xx各个引脚所支持的复用功能,而图2显示的是K64的各个引脚所支持的复用功能,对比会发现两者对于GPIO的名称定义方式不同,在K64中,PTA,PTB,PTC等代表着GPIO功能引脚的名称,所以GPIO寄存器的名称也与PTA,PTB,PTC等相呼应,如图3所示。 图 1 图2 图 3 但在LPC43xx中却不同,P1.5为引脚的名称,而GPIOn[m]是作为GPIO功能的引脚的名称(如图4所示),两者有着独立的寄存器。 图4
所以正确的代码应如下所示: Chip_SCU_PinMuxSet(0x1, 5, (SCU_MODE_FUNC0)); //P1.5 引脚设为GPIO功能
Chip_GPIO_SetPinDIROutput(LPC_GPIO_PORT, 0x1, 8);//P1.5 GPIO设为输出
Chip_GPIO_SetPinState(LPC_GPIO_PORT, 0x1, 8, false);// P1.5 GPIO输出低电平 |
|