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"