注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
bianyuan2010的个人空间 https://home.eeworld.com.cn/space-uid-282546.html [收藏] [复制] [分享] [RSS]
日志

LM3S811--使用学习心得!!(初学者请指教)

已有 4247 次阅读2011-5-14 14:28 |个人分类:LM3S811--使用学习心得|

      LM3S811--使用学习心得(一)!!(初学者请指教)

    当得知自己抢到开发板的那一刻很激动,确切的说是幸运,因为楼上的网友获奖重复,所以延续到楼下,楼上是幸运的,我也很感谢他。四月底收到的板子,说实话,那几天自己一直在看手机,急切地期待着快递的电话!一天上午的英语课,那个等待已久的电话终于来了。我迫不及待的跑了下去!(嘿嘿,让大家见笑了,学习硬件至今,作为学生的我始终没有一块开发板,一切是理论,一切都是借用,所以有自己开发板那种心情,是难以言语的)

自己搞的是硬件,却很难有实践机会,出于种种原因!自己也一直在努力争取,尝试去参加一些比赛之类的!

说了这么多废话,也该切入正题了!对于ARM来说,我是初学者,对于LM3S811来说那就更陌生了,所以当我打开光盘资料时有些懵,对于不擅长英语的我来说,有一种脑袋发胀的感觉,但出于对ARM兴趣,对LM3S811的好奇,自己还是硬着头皮看下去,慢慢来吧!

有不懂的问题,及时看论坛【最爱TI M3 - Stellaris!】板块,去求助,看看牛人是怎么做的,自己的硬件及编程基础薄弱,所以对于TI M3 – Stellaris的学习只能慢慢来,一步一个脚印吧,希望大家见谅,同时对于自己的错误部分,希望大家能够指正、交流学习!

先从第一个例子开始吧!

前几天在论坛看到,有网友传了LED的工程,自己下载了试试,运行通过了,就是没看到什么结果,自己试着做了调试和修改,想实现LED间隔闪烁点亮的效果,因为以前学DSP时,在TI的F2812开发板上做了6个贴片式LED间隔点亮(1、3、5或2、4、6),后来自己在中间加了延时实现了跑马灯,效果可以(可能熟悉的人感觉那很简单,但对于一个初学者来说,很是激动,看到自己修改的程序跑起来,那时还是很兴奋的,毕竟是自己调试晕、运行的第一个程序,嘿嘿)TI的F2812功能还是很强大的,后来又用它做了一部分12864显示的!收获还是不少的!TI的LM3S811这是第一次用,现在,慢慢熟悉中!要感谢maylove,她让我有幸接触到LM3S811!!

(拿到板子,最初,一直忙于老师分配的任务,自己也试着调试一些程序,搜集了一些学习资料,但一直没有整理出来,今天就整理出来,大家一起学习,期待以后继续分享!)

呵呵,回归正题!(

/*******************************
名称:LED灯延时闪烁(跑马灯)
简要说明:
 LED:
 
M30-PB1/PWM3-----------L6,RED
M35-PE0/PWM4-----------L7,GREEN
M36-PE1/PWM5-----------L8,BLUE
 
M25-PD0/PWM0--------------L3,RED(我的板子上显示是红色的之前有网友传的资料标注是蓝色和L5刚好相反)
M26-PD1/PWM1--------------L4,GREEN
M29-PB0/PWM2--------------L5,BLUE

  与JTAG接口复用的GPIO是:PB7(/TRST)、PC0(TCK)、PC1(TMS)、PC2(TDI)、PC3(TDO)
*******************************
*/


#include "hw_ints.h"
#include "hw_memmap.h"
#include "hw_types.h"
#include "gpio.h"
#include "sysctl.h"
//#include "cpu.h"
//#include "interrupt.h"
//#include "hw_timer.h"
//#include "debug.h"
#include "timer.h"

#define uint unsigned int
#define uchar unsigned char

#define     LED_PERIPBH     SYSCTL_PERIPH_GPIOB                       //LED外围   B端口作为通用输入/输出  宏定义
#define     LED_PERIPDH     SYSCTL_PERIPH_GPIOD                       //LED外围   D端口作为通用输入/输出  宏定义
#define     LED_PERIPEH     SYSCTL_PERIPH_GPIOE                       //LED外围   E端口作为通用输入/输出  宏定义
  

#define  BLUE1_L     GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_1,0)     //BLUE1管脚为低
#define  GREEN1_L    GPIOPinWrite(GPIO_PORTE_BASE,GPIO_PIN_0,0)     //GREEN1管脚为低
#define  RED1_L     GPIOPinWrite(GPIO_PORTE_BASE,GPIO_PIN_1,0)     //RED1管脚为低

#define  BLUE2_L     GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_0,0)     //BLUE2管脚为低
#define  GREEN2_L    GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_1,0)     //GREEN2管脚为低
#define  RED2_L     GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_0,0)     //RED2管脚为低

#define  BLUE1_H     GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_1,1)     //BLUE1管脚为高
#define  GREEN1_H    GPIOPinWrite(GPIO_PORTE_BASE,GPIO_PIN_0,1)     //GREEN1管脚为高
#define  RED1_H     GPIOPinWrite(GPIO_PORTE_BASE,GPIO_PIN_1,1)     //RED1管脚为高

#define  BLUE2_H     GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_0,1)     //BLUE2管脚为高
#define  GREEN2_H    GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_1,1)     //GREEN2管脚为高
#define  RED2_H      GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_0,1)     //RED2管脚为高 

 
void delay(uint a)
{
   uint i,j;

      for(i=10000;i>0;i--)
       for(j=a;j>0;j--)
    {
    }

}      
      
int main(void)

   
     SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
                    SYSCTL_XTAL_6MHZ);   
  //SysCtlClockSet函数()系统时钟设置  采用主振荡器  外接6MHz晶振  不分频
 
     SysCtlPeripheralEnable(LED_PERIPBH);      //使能LED所在引脚
  SysCtlPeripheralEnable(LED_PERIPDH);
  SysCtlPeripheralEnable(LED_PERIPEH);
      //GPIO输出型的 
  GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE, GPIO_PIN_0);        
  GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE, GPIO_PIN_1);
  GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_0);
  GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_1);
  GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_0);
     GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_1);
 
 
  while(1)
    {
  

  BLUE1_L;
  BLUE2_L;
  RED1_L;
  RED2_L;
  GREEN1_L;
  GREEN2_L;

delay(100);

  BLUE1_H;
  BLUE2_H;
  RED1_H;
  RED2_H;
  GREEN1_H;
  GREEN2_H;
 
 
    }                                
 
  
}

对其中一些,做了修改,运行通过了,但也遇到了一些问题:只看到了L4、L5、L7闪烁,其他三个,没看到明显效果,还有就是闪烁的效果没有那么炫,对板子初次上电时,感觉很炫!

自己用相机拍了些演示视频,有些模糊,不过还可以看得清:

自己刚传到优酷,还在审核中,稍后把链接发出来!

http://v.youku.com/v_show/id_XMjY2ODI2NTMy.htm l

 

希望论坛的高手能多指教、指教!谢谢!

关于工程的完整文件,在论坛里上传:名字:LED&LM3S811

下面是6个LED闪烁对角点亮的程序,贴出来,和没有板子的朋友一起分享,程序运行后效果如视屏连接中所示,很炫,很夺目,呵呵。。。

#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "inc/hw_gpio.h"
#include "driverlib/debug.h"
#include "driverlib/gpio.h"
#include "driverlib/sysctl.h"
#include "driverlib/systick.h"
#include "driverlib/adc.h"
#include "inc/lm3s811.h"
#include "driverlib/timer.h"
#include "driverlib/interrupt.h"
#include "inc/hw_ints.h"

unsigned char TIME=0;
#define New_Edition 

#define Blink_First   0
#define Blink_Second  2
#define Blink_Third   4

#define Blue_Blink_Fast  6
#define Green_Blink_Fast 7
#define Red_Blink_Fast  8

#define Blue_Blink_Slow  15
#define Green_Blink_Slow 20
#define Red_Blink_Slow  25

#define All_LED_Close  80

#define LED_Close_Status_A  100
#define LED_Close_Status_B  200

void delay() //程序延时
{
 int i=300000;
    while(i>0) 
    {
  i--;
   }
}
void O_D2()
{
    GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_5,GPIO_PIN_5);
}
void C_D2()
{
   GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_5,0);
}
void O_L3()
{  
#ifdef New_Edition
    GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_0,~0);
#else
   GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_0,0);
#endif
}
void C_L3()
{
#ifdef New_Edition
   GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_0,~GPIO_PIN_0);
#else
   GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_0,GPIO_PIN_0);
#endif
}
void O_L4()
{
#ifdef New_Edition
    GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_1,~0);
#else
   GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_1,0);
#endif
}
void C_L4()
{
#ifdef New_Edition
   GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_1,~GPIO_PIN_1);
#else
   GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_1,GPIO_PIN_1);
#endif
}
void O_L5()

#ifdef New_Edition
   GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_0,~0);
#else
    GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_0,0);
#endif
}
void C_L5()
{
#ifdef New_Edition
   GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_0,~GPIO_PIN_0);
#else
   GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_0,GPIO_PIN_0);
#endif
}
void O_L6()
{
#ifdef New_Edition
    GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_1,~0);
#else
   GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_1,0);
#endif
}
void C_L6()
{
#ifdef New_Edition
   GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_1,~GPIO_PIN_1);
#else
   GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_1,GPIO_PIN_1);
#endif
}
void O_L7()
{
#ifdef New_Edition
    GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0,~0);
#else
   GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0,0);
#endif
}
void C_L7()
{
#ifdef New_Edition
   GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0,~GPIO_PIN_0);
#else
   GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0,GPIO_PIN_0);
#endif
}
void O_L8()
{
#ifdef New_Edition
    GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1,~0);
#else
   GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1,0);
#endif
}
void C_L8()
{
#ifdef New_Edition
   GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1,~GPIO_PIN_1);
#else
   GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1,GPIO_PIN_1);
#endif
}
void OA()
{
   O_L3();O_L4();O_L5();O_D2();O_L6();O_L7();O_L8();
}
void CA()
{
   C_L3();C_L4();C_L5();C_D2();C_L6();C_L7();C_L8();
}

void
Timer0IntHandler(void)
{
    //
    // 清除 Timer 中断
    //
    TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
 TIME++;
 if(TIME == LED_Close_Status_B)  // 状态在 LED_Close_Status_A 与 LED_Close_Status_B 之间,LED 始终为灭的状态
  TIME = LED_Close_Status_A;


}
void
SysTickIntHandler(void)
{
 if(GPIOPinRead(GPIO_PORTC_BASE,GPIO_PIN_4)==0x00)//检测 USER 键是否被按下
  TIME=0; //将控制 LED 状态的标志归零
}
int main(void)
{
 
 SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_6MHZ);//配置系统时钟
 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB | SYSCTL_PERIPH_GPIOC | SYSCTL_PERIPH_GPIOD | SYSCTL_PERIPH_GPIOE);//启用 GPIO B、C、D 和 E
 
 SysTickPeriodSet(SysCtlClockGet() / 20);//配置系统最小时间中断
    SysTickIntEnable();//启用最小时间中断

 GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_0 | GPIO_PIN_1);//配置PB0、PB1为输出
 GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE, GPIO_PIN_5 );//配置PC5为输出
 GPIOPinTypeGPIOInput(GPIO_PORTC_BASE, GPIO_PIN_4 );//配置PC4为输入
 GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_0 | GPIO_PIN_1);//配置PD0、PD1为输出
 GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1);//配置PE0、PE1为输出
 
 SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);//启用 Timer0
 
    TimerConfigure(TIMER0_BASE, TIMER_CFG_32_BIT_PER);//配置 Timer0 为 32 位的定时器
    TimerLoadSet(TIMER0_BASE, TIMER_A, SysCtlClockGet()/2);//配置 Timer0 的时间为 0.5 秒

    //
    // 启用 Timer0/SysTick
    //
    IntEnable(INT_TIMER0A);
    TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
 SysTickEnable();
 TimerEnable(TIMER0_BASE, TIMER_A);
 
 CA();//先关闭所有的 LED 灯

 while(1)
 {
    //开机闪三下
    if(TIME == Blink_First)
  {     
   OA();
  }
  if(TIME == Blink_First+1)
  {     
   CA();
  }
     if(TIME == Blink_Second)
  {     
   OA();
  }
  if(TIME == Blink_Second+1)
  {     
   CA();
  }
  if(TIME == Blink_Third)
  {     
   OA();
  }
  if(TIME == Blink_Third+1)
  {     
   CA();
  }
  //进入对角快闪状态
  if((TIME == Blue_Blink_Fast)||(TIME == Blue_Blink_Fast+3)||(TIME == Blue_Blink_Fast+6))
  {     
   O_L3();O_L6();C_L5();C_L8();
  }
  if((TIME == Green_Blink_Fast)||(TIME == Green_Blink_Fast+3)||(TIME == Green_Blink_Fast+6))
  {     
   O_L4();O_L7();C_L3();C_L6();
  }
  if((TIME == Red_Blink_Fast)||(TIME == Red_Blink_Fast+3)||(TIME == Red_Blink_Fast+6))
  {     
   O_L5();O_L8();C_L4();C_L7();
  }
  //进入对角慢闪状态
  if((TIME == Blue_Blink_Slow)||(TIME == Blue_Blink_Slow+15)||(TIME == Blue_Blink_Slow+30)||(TIME == Blue_Blink_Slow+45))
  {     
   O_L3();O_L6();delay();C_L5();C_L8();
  }
  if((TIME == Green_Blink_Slow)||(TIME == Green_Blink_Slow+15)||(TIME == Green_Blink_Slow+30)||(TIME == Green_Blink_Slow+45))
  {     
   O_L4();O_L7();delay();C_L3();C_L6();
  }
  if((TIME == Red_Blink_Slow)||(TIME == Red_Blink_Slow+15)||(TIME == Red_Blink_Slow+30)||(TIME == Red_Blink_Slow+45))
  {     
   O_L5();O_L8();delay();C_L4();C_L7();
  }
  //超时,未按下 USER 键,则关闭所有的 LED 灯
  if(TIME > All_LED_Close)
  {     
   CA();
  }

 };


}

优酷视频:javascript:;

 

完整的工程文件会在论坛上传,请大家谅解!

LED控制端口(所圈红色)

LED部分电路!

初始上电后!

程序运行!

全部作者的其他最新日志
评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章