This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

用TM4C123GXL配置gpio遇到的问题



我想把PC4至高,但是用万用表测出来电压只有0.6 0.7左右,这是为什么呀?
不是应该3.3v吗?
我是这样配置的:
GPIO_PORTC_DATA_R |= 0X10

  • 仔细检查一下电路和代码初始化部分吧。

    给个初始化的例子:

    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);

    GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE,  GPIO_PIN_4);

    GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_4, GPIO_PIN_4);

    电路部分的话,确定PC4输出不要短路到其他地方就好了。

  • 谢谢。
    我照着你给的配置
    把GPIODirModeSet(GPIO_PORTC_BASE, GPIO_PIN_4,GPIO_DIR_MODE_OUT)
    改成GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE,  GPIO_PIN_4)
    就能输出3.3v。
    但是这是为什么呀?
    最近经常遇到这种问题,很是头痛呀。
  • GPIODirModeSet这个函数只是把这个GPIO的方向配置为输出。

    GPIOPinTypeGPIOOutput这个函数的源码:

    void
    GPIOPinTypeGPIOOutput(uint32_t ui32Port, uint8_t ui8Pins)
    {
    //
    // Check the arguments.
    //
    ASSERT(_GPIOBaseValid(ui32Port));

    //
    // Set the pad(s) for standard push-pull operation.
    //
    GPIOPadConfigSet(ui32Port, ui8Pins, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD);

    //
    // Make the pin(s) be outputs.
    //
    GPIODirModeSet(ui32Port, ui8Pins, GPIO_DIR_MODE_OUT);
    }

    这里会先把端口配置为GPIO功能,然后再配置方向。

    这样就解释清楚了。


  • 我之前是这样配置的

    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);

    GPIODirModeSet(GPIO_PORTC_BASE, GPIO_PIN_4 ,GPIO_DIR_MODE_OUT);

    GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_4, GPIO_PIN_4);

    改成

    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);

    GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE,  GPIO_PIN_4);

    GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_4, GPIO_PIN_4);

    就能工作。

    我理解你说的意思,但是我的程序是从别人写成功移植过来的,为什么别人可以用?我的就不行?

    每次看别人的程序都会出现这样的问题。

  • 如果你想了解详细的寄存器操作,可以去库函数源码中查看GPIOPadConfigSet函数。这里面执行了很多操作。

    对于一个pin脚来说,首先要把它配置为GPIO功能,然后配置方向,作为输出,要驱动能力,作为输入,要配置上下拉等寄存器后,才能对这个GPIO进行操作。

    pin脚还可以被配置为外设复用功能。比如复用为串口、SPI的接口。

    我不认为别人的代码如果仅仅只有这一小段就能实现PC4的操作。可能他的代码其他地方还有和PC4相关的操作,或者是别的原因。

    所以你不用纠结别人咋回事,或许他的代码本来就不严谨。

  • 非常感谢你耐心的解答。谢谢。

  • 别客气,后面开发过程中遇到问题也欢迎贴上来大家一起讨论。