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"

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM