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.

LAUNCHXL-CC1310: 如何动态切换CC1310的GPIO的输入输出状态?

Part Number: LAUNCHXL-CC1310
Other Parts Discussed in Thread: CC1310

大家好,有谁知道如何动态切换CC1310的GPIO的输入输出状态?采用动态切换的时候,如何读取输入高低电平,以及输出高低电平?

有用如下语句切换,似乎没用。这时候pinTable中是否需要处理?


#define SDA_OUT (GPIO_setConfig(Board_DAT, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_HIGH))
#define SDA_IN (GPIO_setConfig(Board_DAT, GPIO_CFG_INPUT))


SDA_IN;

while(PIN_getInputValue(Board_DAT) != false){....}


SDA_OUT;
PIN_setOutputValue(pinHandle, Board_DAT, 1);

  • 你好Kevin,我移除了pinTable中Board_DAT的定义,然后参照GPIO的设置修改如下,依然没有输出效果,高电平很低,跟随旁边一个SCK管脚的信号...

    #define SDA_OUT (GPIO_setConfig(Board_DAT, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_HIGH))
    #define SDA_IN (GPIO_setConfig(Board_DAT, GPIO_CFG_INPUT))
    GPIO_init();

    SDA_IN;

    while(GPIO_read(Board_DAT) != false){....}

    SDA_OUT;

    GPIO_write( Board_DAT, 1);

    GPIO_write( Board_DAT, 0);

    GPIO_write( Board_DAT, 1);

  • 我用文档中的例子测了一下,可以改变IO的状态

    #define SDA_OUT (GPIO_setConfig(Board_DAT, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_HIGH))
    #define SDA_IN (GPIO_setConfig(Board_DAT, GPIO_CFG_INPUT))
    GPIO_init();

    GPIO_init();必须在所有GPIO API之前使用,所以上面宏定义的方式可能需要改一下,不使用宏定义试试

  • GPIO_init()是在最前面调用的,也把预定义去掉直接引用试过,还是不行。

    Board_DAT只使用了GPIO方法。但是其他管脚使用的是库默认的PIN方法。有没有问题?

  • 方便提供一个示例程序嘛?我的程序如下:

    void weightMesure()
    {
    static uint32_t weightPre = 0,stopCnt = 0;
    uint32_t tmpWeight = 0,i=0;
    uint16_t config = 0x6520,cfgMsk = 0x4000;
    GPIO_init();
    GPIO_setConfig(Board_CS1237_DAT, GPIO_CFG_IN_PU);
    while(GPIO_read(Board_CS1237_DAT) != false)
    {
    PIN_setOutputValue(pinHandle, Board_CS1237_CLK, 0);
    usleep(100);
    if(tmpWeight++>1000)break;
    }
    tmpWeight = 0;
    for(i = 0;i<24;i++)
    {
    tmpWeight<<=1;
    PIN_setOutputValue(pinHandle, Board_CS1237_CLK, 1);
    usleep(1);
    PIN_setOutputValue(pinHandle, Board_CS1237_CLK, 0);
    if(GPIO_read(Board_CS1237_DAT) != 0)tmpWeight|=1;
    usleep(1);
    }

    for(i = 24;i<46;i++)
    {
    PIN_setOutputValue(pinHandle, Board_CS1237_CLK, 1);
    if(i == 28)
    {
    GPIO_setConfig(Board_CS1237_DAT, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_HIGH);
    }
    if(i>=29)
    {
    if(i!=36)
    {
    if(config&cfgMsk)
    GPIO_write(Board_CS1237_DAT, 1);
    else
    GPIO_write(Board_CS1237_DAT, 0);
    cfgMsk>>=1;
    }
    else{
    GPIO_setConfig(Board_CS1237_DAT, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_HIGH);
    }
    }
    usleep(1);
    PIN_setOutputValue(pinHandle, Board_CS1237_CLK, 0);
    usleep(1);
    }
    GPIO_setConfig(Board_CS1237_DAT, GPIO_CFG_IN_PU);
    PIN_setOutputValue(pinHandle, Board_CS1237_CLK, 1);
    weightPre = (weightPre  + tmpWeight )/2;
    return weightPre ;
    }

  • 不同的IO分别使用PIN和GPIO驱动程序应该是没问题的

    建议你用C:\ti\simplelink_cc13x0_sdk_4_20_01_03\examples\rtos\CC1310_LAUNCHXL\drivers\empty例程单独测试GPIO动态配置

    可以将IO先配置为输入,然后再动态配置为输出点亮LED观察现象