TIVA C Launchpad的初识(周计划之第二周)
[复制链接]
StellarisLM4F120 LaunchPad评估套件是一款基于德州仪器ARMCortex-M4F微控制器的低成本评估平台。该评估套件的设计突出了LM4F120H5QR 微处理器 具有一个USB2.0接口和休眠模块的特性。 其中StellarisLM4F120H5QR 微处理器提供80MHz 的32位ARM Cortex-M4 浮点 CPU,该 CPU 带有可进行 100,000 次写擦循环的 256KB 闪存和许多外设,例如 1MSPS ADC、8 个 UART、4 个 SPI、4 个 I2C、USB 以及最多 27 个定时器(部分定时器最高可配置为 64 位)。 Stellaris LM4F120 LaunchPad评估套件具备BoosterPack 兼容性,两个双性 20 引脚可堆叠接头提供了多种出色的开包即用连接选项。这 40 个引脚使得您可以将针对显示屏、无线接口、传感器和其他功能的支持非常轻松地添加至您的项目,同时提供与现有MSP430 和 C2000LaunchPad 的基本兼容性。 Stellaris LM4F120 LaunchPad评估套件可提供板载仿真功能,通过板载方式提供了两个通用用户开关、一个复位开关以及电源LED 和用户可编程RGB LED,以使开发变得便捷。同时还配备了一根跳线,以便对电流进行测量。 Stellaris LM4F120 LaunchPad 支持 32 位 StellarisLM4F1xx 系列的 ARMCortex-M4F MCU,而且提供了对这个不断扩展的Stellaris MCU 系列的非常好的介绍。 Stellaris LaunchPad 包含 ARM Cortex-M4F 开发入门所需的一切: Stellaris LM4F120 LaunchPad 评估板 (EK-LM4F120XL) 板载 Stellaris 内电路调试接口 (ICDI) USB Micro-B 型插头至 USB-A 型插头电缆 自述文档 免费下载 EK-LM4F120XL StellarisWare
现在新出的入门开发板,几乎都是带有USB接口的MCU最小系统。这已经成为一种主流设计,最小系统配合外围周边可以实现灵活的工程开发,甚至直接嵌入在最终系统中。 将评估板与其他板子对比,发现其设计目的之一是克隆Arduino的开发模式。LM4F120XL参考了Arduino的外形尺寸,还参考了Arduino的扩展I/O模式。然而两者的区别在于: · LM4F120XL采用Cortex-M4处理器,存储容量、I/O特性和处理能力强过目前大多数Arduino; · LM4F120XL扩展引脚定义完全不同,既有排针,也有排母,其堆叠特性要好于Arduino; · LM4F120XL的Booster扩展板品类不算少,但数量比Arduino少,而且缺乏集成应用型扩展板如3G MODEM等; · LM4F120XL工作于3.3V,而非5V I/O; · LM4F120XL的目标板和调试器MCU是同一款处理器; · LM4F120XL调试器为USB复合设备:CDC(VCP/UART)+ Debugger + DFU固件更新; · LM4F120XL支持Debugger/Device两种USB接口供电(和EK-STM32F很像); · LM4F120XL采用MiniUSB插口,插拔比较费劲,尽量插拔另一端USB标准插头; · LM4F120XL保留了外部JTAG/SWD接口; · LM4F120XL采用TI自己的LDO供电IC; · LM4F120XL很少使用大容量电解电容,这或许和供电IC有关...... qs-rgb工程,即Launchpad自带的固件。 qs-rgb已经采用了浮点计算来计算颜色频谱,在一个三色LED上实在大材小用。其主要输出就是LED,输入是串口命令行,支持不同模式的LED闪烁及Hibernate模式。 这个三色LED的亮度实在是太亮了!在晚间简直是亮瞎眼镜。建议在超级终端中将其intensity代为较小的数值,如05。保护视力很重要。
/** 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)); }
[ 本帖最后由 chen8710 于 2013-11-2 21:16 编辑 ]
|