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.

【连载】Tiva的GPIO 作为普通IO输出时的配置过程



按照芯片的逻辑来说,配置IO的过程应该如下:

a) 配置系统时钟
b) 打开与此 GPIO 端口对应的端口时钟。
c) 将端口配置为数字输入输出的 GPIO 功能,而不是端口的其它复用功能
d) 配置 GPIO 端口驱动电流大小和上下拉电阻的模式
e) 设置管脚的输入输出方向。
f) 设置管脚输出是高电平还是低电平。


  • 本帖最后由 xyz549040622 于 2015-11-7 00:06 编辑


    接上,配置IO为普通IO的时候,按照上图中的流程,应该分6步配置了,那我们实际看看官方的例程,是这么配置的

    SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ |
    SYSCTL_OSC_MAIN);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);//启用GPIOF端口并提供一个时钟
    GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1);//配置IO为输出模式
    GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, GPIO_PIN_1);//配置输出高电平


    实际中只用了4步,没有配置为数字功能,没有配置GPIO的时钟,没有配置IO的模式。这是为什么呢?

    1.关于时钟的问题,TIVA的GPIO时钟可以选择挂在APB总线上或者挂在AHB总线上,复位后是默认挂在APB总线上的。因此这个选择使用默认的了,当选择AHB的时候需要用到这个函数 SysCtlGPIOAHBDisable(SYSCTL_PERIPH_GPIOF);//使能GPIO的AHB时钟,默认是通过APB时钟访问的
    寄存器的介绍如下:

    2.关于GPIO选择是外设还是普通IO,其实是有这么一个寄存器的,手册中的说明如下

    这个寄存器在函数GPIODirModeSet()中被设置了,当设置IO方向的时候,自动就设置这个寄存器了

    3.关于IO的方向和模式设置数,是这GPIODirModeSet()和GPIOPadConfigSet(),但是函数中没有直接设置,这是因为函数库提供了GPIOPinTypeGPIOOutput()这么一个函数,当使用这个函数的时候,自动配置了IO的方向和模式,函数源码如下:

    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);
    }



  • 所以,TIVA设置普通IO用作输出的时候,一般有下面几句就够了
    1.SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);//启用GPIOF端口并提供一个时钟
    2.GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1);//配置IO为输出模式
    3.GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, GPIO_PIN_1);//配置输出高低电平

  • 当设置普通IO为输出模式,并需要设置引脚的电流和输出引脚的配置时候,一般有下面几句就够了
    1.SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);//启用GPIOF端口并提供一个时钟
    2.GPIOPadConfigSet(ui32Port, ui8Pins, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD);//设置引脚的电流和引脚的模式
    3.GPIODirModeSet(ui32Port, ui8Pins, GPIO_DIR_MODE_OUT);//设置引脚为输出模式
    4.GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, GPIO_PIN_1);//配置输出高低电平

  • 当设置普通IO为输出模式,并需要设置引脚的电流和输出引脚的配置时候,一般有下面几句就够了
    1.SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);//启用GPIOF端口并提供一个时钟
    2.GPIOPadConfigSet(ui32Port, ui8Pins, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD);//设置引脚的电流和引脚的模式
    3.GPIODirModeSet(ui32Port, ui8Pins, GPIO_DIR_MODE_OUT);//设置引脚为输出模式
    4.GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, GPIO_PIN_1);//配置输出高低电平

  • 您好, 请问哪里可以看到这些函数原型呢? 小弟想看一下 TI 大神的实现,学习研究一下。
  • C:\ti\TivaWare_C_Series-2.1.4.178\driverlib这个路径下有函数原型的。.c和.h文件就是原型了。

  • 好的,十分感谢您。