TA的每日心情 | 无聊 2016-12-20 15:08 |
---|
签到天数: 510 天 连续签到: 1 天 [LV.9]以坛为家II
|
我想当大家有个开发板时建的第一个工程应该是点亮LED灯吧。这回我们也来点亮下LED灯,不过鉴于点亮LED灯的程序就是官方提供的例程Project0,所以我们稍微加点东西吧。我们使用LM4F Launchpad开发板上的按键来点亮开发板上的RGB三色LED灯,这样一来GPIO口的输入,输出和中断功能全部都使用到了,应该也是一个入门的好方法。下面我们使用CCS来建立我们的工程。
1.打开CCS,File->New->CCS Project,在弹出来的对话匡中国输入工程名KeyInt,选择对应的型号Stellaris LM4F120H5QR,并选择建立Empty Project(with main.c)
2.右击工作空间中的KeyInt,单击Properties
选择build->ARM Compiler->Include Options,在右边的包含路径中加入StellarisWare固件库的路径,我的是"D:\ti\StellarisWare",请根据你的路径修改;在build->ARM Linker->File Search Path下包含要用的driverlib-cm4f.lib,该文件在
StellarisWare\driverlib\ccs-cm4f\Debug下
3.开发板的按键对应的引脚为PF4,我们可以使用GPIO Port F的中断来检测按键。因为要使用中断,所以我们要将初始化中断向量表的startup_ccs.c复制到工程文件目录下,该文件可以在官方提供的Project0中找到。在startup_ccs.c中找到GPIO Port F的中断函数地址处,加入中断处理函数KeyISR,并在文件前面加入extern void KeyISR(void);表示中断文件在其他文件中。
4.在main.c中包含头文件,编写中断函数KeyISR和主函数- /*
- * main.c
- */
- #include "inc/hw_memmap.h"
- #include "inc/hw_types.h"
- #include "driverlib/sysctl.h"
- #include "driverlib/gpio.h"
- #include "driverlib/interrupt.h"
- #include "inc/hw_ints.h"
- #define SYS_CLOCK 50000000 //CPU时钟频率
- #define KEY GPIO_PIN_4 //按键USE_SW1引脚宏定义
- #define RED_LED GPIO_PIN_1 //红色LED灯宏定义
- #define BLUE_LED GPIO_PIN_2 //蓝色LED灯宏定义
- #define GREEN_LED GPIO_PIN_3 //绿色LED灯宏定义
- long key_value = 0; //按键值
- //**********************************************************************
- //本工程使用PF4上的按键采用中断方法依次点亮和熄灭RGB三色LED灯(PF1,PF2,PF3)
- //**********************************************************************
- void main(void)
- {
- int i = 0;
- long temp = 0;
- //使用外部16M晶振,使用PLL,系统时钟设为50MHz
- SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL |
- SYSCTL_XTAL_16MHZ | SYSCTL_OSC_MAIN);
- //使能按键和LED所在的GPIO
- SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
- //初始化LED灯引脚,设置为输出
- GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE,RED_LED | BLUE_LED | GREEN_LED);
- //配置LED灯引脚:最大输出电流2mA,推拉输出
- GPIOPadConfigSet(GPIO_PORTF_BASE,RED_LED | BLUE_LED| GREEN_LED,
- GPIO_STRENGTH_2MA,GPIO_PIN_TYPE_STD);
- //初始化按键引脚,设置为输入
- GPIOPinTypeGPIOInput(GPIO_PORTF_BASE,KEY);
- //配置按键引脚:弱上拉输入
- GPIOPadConfigSet(GPIO_PORTF_BASE,KEY,
- GPIO_STRENGTH_2MA,GPIO_PIN_TYPE_STD_WPU);
- //设置GPIO中断方式:上升沿触发
- GPIOIntTypeSet(GPIO_PORTF_BASE,KEY,GPIO_RISING_EDGE);
- //使能按键引脚的GPIO中断
- GPIOPinIntEnable(GPIO_PORTF_BASE,KEY);
- IntEnable(INT_GPIOF);
- while(1)
- {
- //如果按键按下进入事件处理
- if(key_value & KEY)
- {
- switch(i)
- {
- case 0://红灯翻转
- temp = GPIOPinRead(GPIO_PORTF_BASE,RED_LED);
- GPIOPinWrite(GPIO_PORTF_BASE,RED_LED,~temp);
- key_value &= ~KEY;
- i = 1;
- break;
- case 1://蓝灯翻转
- temp = GPIOPinRead(GPIO_PORTF_BASE,BLUE_LED);
- GPIOPinWrite(GPIO_PORTF_BASE,BLUE_LED,~temp);
- key_value &= ~KEY;
- i = 2;
- break;
- case 2://绿灯翻转
- temp = GPIOPinRead(GPIO_PORTF_BASE,GREEN_LED);
- GPIOPinWrite(GPIO_PORTF_BASE,GREEN_LED,~temp);
- key_value &= ~KEY;
- i = 0;
- break;
- }
- }
- else
- {
- }
- }
- }
- void KeyISR(void)
- {
- //读取中断状态
- key_value = GPIOPinIntStatus(GPIO_PORTF_BASE,true);
- //清中断标志
- GPIOPinIntClear(GPIO_PORTF_BASE,key_value);
- //延时约10ms
- SysCtlDelay(10 * (SYS_CLOCK / 3000));
- }
复制代码 5.点击Project->Build Project来编译工程,再点Run->Debug进入调试界面,按F8开始调试,按下按键可以看到红灯亮,再按会有其他等依次亮起再依次熄灭。下面是效果视频和完整工程,记得要把StellarisWare固件库的路径和driverlib-cm4f.lib 的路径改成你的,不然可能会报错
KeyInt.zip
(35.24 KB, 下载次数: 43)
|
|