這是最基本的單片機運用,點亮第一個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"