13456|38

4138

帖子

0

TA的资源

五彩晶圆(中级)

楼主
 

鑫海宝贝EK-LM3S811使用心得(序)g1.0_led [复制链接]

鑫海宝贝EK-LM3S811使用心得(序)g1.0_led

五一之前同学帮我收的邮件---我期待已久的宝贝EK-LM3S811 EVALUATION BOARD,原因是我到石家庄参加婚礼,在石家庄呆了十天,把我急的都不行了嘿嘿,5号回到学校就箭一般的飞向了实验室。看看论坛的M3的帖子,看有些朋友的锁住了,就没敢轻举妄动,再有就是忙别的了,仅仅看了看M3的资料,没有进行板子的调试工作,今天已经是18号了,索性对我小811进行了使用。

先从我的学习EK-LM3S811过程讲起吧,首先我细致的阅读了《LM3S811中文数据手册》、《JTAG防锁死和LM3S系列几个基本例程》、《lm3sapp_jtag_unlock_note》、《Stellaris驱动库用户指南(已解密)》,虽然这些与要说的led没有什么直接的关系,但是如果我们想要用好LM3S811board,那么对我们自己的板子有什么样的功能,做哪方面设计更擅长的了解就是必不可少的了,led的这一节课g1.0_led主要是将大家带入这个LM3S811这个开发小世界,让大家有一个过程性的了解,上面几个pdf文件在论坛里都有,我就是从坛友那里分享过来的,找不到的可以找我要;其次呢就是开发环境的了解,原来用过51单片机,因此对keil有简单的使用经历,一直没用过IAR,所以这也是一次对keil的深入学习同时也是对IAR的了解使用的机会;最后呢我对光盘给带的原理图进行了深入理解,认真的分析,至于坛友说的led灯的红蓝标注错误问题,我觉得无关紧要,主要是L3~L8的标注没问题就好了,经过我今天自己实际测试L3~L8的标注无误,可以放心使用。

下面就让我来介绍一下我的811的使用,led永远是经典之中的经典,简单入门非led也,所以呢今天我的入门也是用的led灯,其实只要对demo的程序有了理解,什么样的花样也就都不是问题了。我结合了几位网友的帖子,书写了下面的使用历程,有不对的地方欢迎各位高手指正。

 

Ⅰ、软件部分     

开发环境:IAR(光盘)

                   Keil uvision4(光盘)

注释:由于对IAR没有使用经历,所以为了快速上手使用board,我选择了keilIAR将作为我后续学习的内容

 

下载工具:LM Flash Programmer

             Keil软件中的Load工具

注释:第一个下载工具我一直没使用明白,一直就没找到生成的.hex文件,此处还请高手指教;keil软件自带的下载工具load我倒是使用明白了,挺简单的

  

 

 

Ⅱ、硬件部分: 

EK-LM3S811评估板以及配套的miniUSB组件

 

 

 

 

Ⅲ、软件及驱动的安装:

Keil软件的安装和通常使用的软件安装没有区别,正常双击.exe文件即可,依照提示完成每一步的安装。

boardPC通过miniUSB连接以后就会弹出安装提示

我们自己选择要安装的驱动程序,找到光盘所给驱动的路径,即可简单的驱动成功,在设备管理器中就会看到如下的图形

Ⅳ、Keil软件的设置及程序调试:

新建立keil工程时候,在Options for Target中,Device选择LM3S811

  在Target中将晶振改为6M,因为我们的board6M的:

  在Output中我们勾选create HEX File,这样可以生产我们所要的下载文件:

  在C/C++中,改为如图所示,此处结合了David Lee的教程,是为了找到incdriverlib这两个文件夹,把所要头文件包含进来:

  

  Debug的设置为下图:

   

 

      Utilities设置为:

  

   光盘中文件的解压缩路径为:

  

   这样编译器就会在目录F:\LM3S811_Development board information\StellarisWare_for_EK-LM3S811下找到所需头文件

 

 

Ⅴ、程序代码(官网加防止JTAG失效)

#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

 

/****************    如无外部按键设计,可省略**************/

//  定义KEY

#define  KEY_PERIPH             SYSCTL_PERIPH_GPIOC

#define  KEY_PORT               GPIO_PORTC_BASE

#define  KEY_PIN                GPIO_PIN_4

 

//  防止JTAG失效

void jtagWait(void)

{

SysCtlPeripheralEnable(KEY_PERIPH);          //  使能KEY所在的GPIO端口

GPIOPinTypeGPIOInput(KEY_PORT, KEY_PIN);     //  设置KEY所在管脚为输入

 

if (GPIOPinRead(KEY_PORT, KEY_PIN) == 0x00)  //  若复位时按下KEY,则进入

    {

       while(1);                             //  死循环,以等待JTAG连接

    }

 

    GPIOPinIntDisable(KEY_PERIPH,KEY_PIN);   //  禁止KEY所在的GPIO端口

}

 

 

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)

{

                                 jtagWait();     //  防止JTAG失效

                                 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 BCD E

                                

                                 SysTickPeriodSet(SysCtlClockGet() / 20);//配置系统最小时间中断

    SysTickIntEnable();//启用最小时间中断

 

                                 GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_0 | GPIO_PIN_1);//配置PB0PB1为输出

                                 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);//配置PD0PD1为输出

                                 GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1);//配置PE0PE1为输出

                                

                                 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();

                                   }        

 

                                 };

 

 

}

Ⅵ、程序下载:

板子与PC机连接好后,程序编译通过打开Flash,如下图:

Dowmload----下载程序

Erase----擦除flash程序,

下载成功会显示:

然后按一下复位键就会在board上显示我们要显示的效果了。

 

Ⅶ、原理图备注:

六路led:

 

S2按键:

D2D3指示灯:

复位电路:

 

 

 

 

 

 

 

 

 

 

管理器.jpg (24.7 KB, 下载次数: 3)

管理器.jpg

最新回复

我自已建的工程进不了main函数,不知道为什么呀  详情 回复 发表于 2014-8-6 13:15
 
点赞 关注

回复
举报

4138

帖子

0

TA的资源

五彩晶圆(中级)

沙发
 
真是我的word文件

[ 本帖最后由 鑫海宝贝 于 2011-5-18 15:27 编辑 ]

鑫海宝贝EK_LM3S811.doc

703.5 KB, 下载次数: 210

 
 

回复

4138

帖子

0

TA的资源

五彩晶圆(中级)

板凳
 
我照的几张照片

[ 本帖最后由 鑫海宝贝 于 2011-5-18 15:29 编辑 ]

IMAG0215.jpg (698.03 KB, 下载次数: 3)

IMAG0215.jpg

IMAG0216.jpg (719.69 KB, 下载次数: 1)

IMAG0216.jpg

IMAG0222.jpg (718.5 KB, 下载次数: 1)

IMAG0222.jpg
 
 
 

回复

1万

帖子

16

TA的资源

版主

4
 

不错很详细

 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

7228

帖子

192

TA的资源

五彩晶圆(高级)

5
 
鑫海 flash download什么意思啊  写的不错 支持
 
 
 

回复

4138

帖子

0

TA的资源

五彩晶圆(中级)

6
 

回复 4楼 ddllxxrr 的帖子

都是总结别人,加自己实践的结晶呵呵呵,不是完美,但是凑活事呵呵呵,谢谢版主支持
 
 
 

回复

4138

帖子

0

TA的资源

五彩晶圆(中级)

7
 

回复 5楼 常见泽1 的帖子

你说哪里见则?
 
 
 

回复

246

帖子

0

TA的资源

纯净的硅(初级)

8
 

回复 7楼 鑫海宝贝 的帖子

呵呵 写的很详细啊 顶一下!
 
个人签名坚持不懈!
 
 

回复

141

帖子

0

TA的资源

纯净的硅(初级)

9
 
我终于懂了什么是心得  我勒个去哦
 
 
 

回复

141

帖子

0

TA的资源

纯净的硅(初级)

10
 
我终于懂了什么是心得  我勒个去哦
谢谢
 
 
 

回复

246

帖子

0

TA的资源

纯净的硅(初级)

11
 

回复 10楼 hzp08041234 的帖子

哈哈~是啊,写的这么认真,很不容易的啊!要花好多时间的哦
 
 
 

回复

4138

帖子

0

TA的资源

五彩晶圆(中级)

12
 

回复 8楼 missforever 的帖子

谢谢了呵呵呵
 
 
 

回复

4138

帖子

0

TA的资源

五彩晶圆(中级)

13
 

回复 9楼 hzp08041234 的帖子

虽然详细不过好像有人给我找内信息说有问题,我在好好看看
 
 
 

回复

4138

帖子

0

TA的资源

五彩晶圆(中级)

14
 

回复 11楼 missforever 的帖子

从早上到下午三点,累死我了
 
 
 

回复

452

帖子

0

TA的资源

五彩晶圆(初级)

15
 
呵呵,AD我也可以采集电压了,可是没时间写心得啊,羡慕那些有时间的人
 
个人签名人生苦短,何必为声名所累,放开自己心态,去追求自己想要的梦想去吧!http://pytech-inc.taobao.com/
 
 

回复

4138

帖子

0

TA的资源

五彩晶圆(中级)

16
 

回复 15楼 梦之旅 的帖子

是啊都很忙啊,没办法,我也是啊
 
 
 

回复

452

帖子

0

TA的资源

五彩晶圆(初级)

17
 

回复 16楼 鑫海宝贝 的帖子

呵呵,比赛,考试,还有项目,都很多
 
个人签名人生苦短,何必为声名所累,放开自己心态,去追求自己想要的梦想去吧!http://pytech-inc.taobao.com/
 
 

回复

4138

帖子

0

TA的资源

五彩晶圆(中级)

18
 

回复 17楼 梦之旅 的帖子

恩嘿嘿
 
 
 

回复

246

帖子

0

TA的资源

纯净的硅(初级)

19
 

回复 18楼 鑫海宝贝 的帖子

呵呵 以后一起交流哈 我建议把s2按键预留给防锁死那里 这样就更安全了 。呵呵
 
个人签名坚持不懈!
 
 

回复

246

帖子

0

TA的资源

纯净的硅(初级)

20
 

回复 17楼 梦之旅 的帖子

呵呵呵 是啊其实大家都是忙里偷闲 然后玩玩板子 上上论坛 你有参加什么比赛?
 
个人签名坚持不懈!
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表