NO.7 MSP432使用GPIO驱动开发板Led

  这是最基本的单片机运用,点亮第一个LED。

  由于存在TIDriver的帮助和SysConfigs的一键配置,我们的开发非常简单。

  首先,我们要了解什么是GPIO。GPIO全称General-purpose input/output,指的是通用输入输出端口。指的是我们单片机上既能作为输出(输出电压),又能作为输入(检测电压)的端口称为GPIO。GPIO具有很多种用途,比如点亮LED,检测按键输入,甚至可以软件模拟通信协议(通过在不同时刻下,置不同端口的高低电平作为信号进行数据传输)。所以,了解通用的GPIO口对于我们单片机使用是非常重要的。

  这里我不会具体介绍GPIO的常用模式,我会直接讲解GPIO在MSP432是如何应用的。

  首先,我们在ResourceExplorer中找到SimpleLink MSP432P4 SDK下,Example中TI Drivers的gpiointerrupt这个工程,并将其导入到我们的CCS中。

  

  其次,我们浏览下该工程文件下的结构:

  

  我们点击进入gpiointerrupt.syscfg这个文件进入图形化配置我们基本的GPIO口。

  

  我们在gpiointerrupt.syscfg中可以看到非常丰富的外设可以配置。进入GPIO选项,我们可以一键添加具体GPIO工作模式,具体工作模式我就不具体介绍了,相关GPIO工作模式大家自行百度,在这系列的博文中,我们都假设大家具有一定的硬件基础,我们在文章中只是讲如何应用。

  在gpiointerrupt.c中,存放着我们的主程序:

  

/*
 *  ======== gpiointerrupt.c ========
 */
#include <stdint.h>
#include <stddef.h>

/* Driver Header files */
#include <ti/drivers/GPIO.h>

/* Driver configuration */
#include "ti_drivers_config.h"

/*
 *  ======== gpioButtonFxn0 ========
 *  Callback function for the GPIO interrupt on CONFIG_GPIO_BUTTON_0.
 */
void gpioButtonFxn0(uint_least8_t index)
{
    /* Clear the GPIO interrupt and toggle an LED */
    GPIO_toggle(CONFIG_GPIO_LED_0);
}

/*
 *  ======== gpioButtonFxn1 ========
 *  Callback function for the GPIO interrupt on CONFIG_GPIO_BUTTON_1.
 *  This may not be used for all boards.
 */
void gpioButtonFxn1(uint_least8_t index)
{
    /* Clear the GPIO interrupt and toggle an LED */
    GPIO_toggle(CONFIG_GPIO_LED_1);
}

/*
 *  ======== mainThread ========
 */
void *mainThread(void *arg0)
{
    /* Call driver init functions */
    GPIO_init();

    /* Configure the LED and button pins */
    GPIO_setConfig(CONFIG_GPIO_LED_0, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
    GPIO_setConfig(CONFIG_GPIO_LED_1, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
    GPIO_setConfig(CONFIG_GPIO_BUTTON_0, GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_FALLING);

    /* Turn on user LED */
    GPIO_write(CONFIG_GPIO_LED_0, CONFIG_GPIO_LED_ON);

    /* install Button callback */
    GPIO_setCallback(CONFIG_GPIO_BUTTON_0, gpioButtonFxn0);

    /* Enable interrupts */
    GPIO_enableInt(CONFIG_GPIO_BUTTON_0);

    /*
     *  If more than one input pin is available for your device, interrupts
     *  will be enabled on CONFIG_GPIO_BUTTON1.
     */
    if (CONFIG_GPIO_BUTTON_0 != CONFIG_GPIO_BUTTON_1) {
        /* Configure BUTTON1 pin */
        GPIO_setConfig(CONFIG_GPIO_BUTTON_1, GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_FALLING);

        /* Install Button callback */
        GPIO_setCallback(CONFIG_GPIO_BUTTON_1, gpioButtonFxn1);
        GPIO_enableInt(CONFIG_GPIO_BUTTON_1);
    }

    return (NULL);
}

  其中,在GPIO配置中,最主要的是要引入GPIO的头文件

#include <ti/drivers/GPIO.h>

  在使用GPIO口之前,我们要先初始化GPIO

GPIO_init(); //Call driver init functions

  如果说我们要使得某一个LED亮,我们要这样做

/* Turn on user LED */
GPIO_write(CONFIG_GPIO_LED_0, CONFIG_GPIO_LED_ON);

  其中CONFIG_GPIO_LED_0是我们在gpiointerrupt.syscfg配置的GPIO的名称,CONFIG_GPIO_LED_ON可以用0或者1替代,这里我们实现定义了CONFIG_GPIO_LED_ON的值为1方便阅读。

  然后,就没有了。大家可以看到,点亮一个LED就是如此简单。

  至于该c文件下其他功能,是作为按键中断的。我们下次会讲。

  最后提醒下大家,我们在gpiointerrupt.syscfg中配置的GPIO等数据,可以在ti_drivers_config.h中查看。每当我们图形化配置好功能后,再编译一次,CCS就会自动更新。十分方便。

 

/* Driver configuration */
#include "ti_drivers_config.h"

 

posted @ 2020-06-05 13:47  DerekChen517  阅读(1514)  评论(2编辑  收藏  举报