打印

菜鸟学习笔记1

[复制链接]
2067|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lilihua0721|  楼主 | 2011-9-29 21:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
菜鸟学习笔记1当我还是个纯菜鸟的时候,发现论坛上的很多帖子都看不懂,现在我已经由纯菜鸟变成一般菜了,在这写点东西给纯菜鸟,希望能帮助他们快速入门LM3S的开发。
有错误或者表达不清楚的地方也请大家批评指正啊。;P

软件准备:
1、MDK4.12+**
2、LM Flash Programmer
3、开发板驱动
4、StellarisWare
(2、3、4光盘里都有,MDK可能需要自己到网上下)

文档准备(个人觉得比较有用的):
1、LM3S8962英文版datasheet(中文版可能有翻译不准的地方,备着。。。)
2、周立功翻译的LM3S8962数据手册
3、Stellaris驱动库用户指南解锁2750版580页(讲API的)
4、8962_EvalBoard.pdf(里面有板子原理图)
5、其他。。。
(光盘里有一部分,论坛里也有一部分)

刚刚拿到板子,先按照论坛上前辈的帖子,把MDK4.12开发环境搭好,板子的驱动装好。

之后就开始研究入门的第一个程序——blinky。

可以打开StellarisWare\boards\ek-lm3s8962\blinky下的工程blinky.uvproj,打开后点击Flash->download就可以把程序下载到板子里了,这个程序的功能是让小灯闪烁。但这是TI给的示例工程,作为一个新手,我更需要知道的是从建立新工程到编译下载的流程。下面我就白手起家,演示一下从新建空工程到下载的过程。

打开MDK4.12,选择Project->New uVersion Project,然后给工程起个名字保存在一个文件夹里。
之后选择CPU型号LM3S8962。
1.JPG (113.52 KB)
2010-12-23 13:14


之后MDK会提示是否将Startup代码加入到工程中,选择是。一个空工程建好了。
2.JPG (27.82 KB)
2010-12-23 13:14


下面配置工程属性。
选择Project->Options for Target 'Target 1'弹出如下对话框
3.JPG (56.31 KB)
2010-12-23 13:14


Target下Xtal设为8.0,这是告诉编译器板子上主晶振的频率;
C/C++有个Include Paths框,这里是编译器查找include文件的路径,如果没有指定路径,编译器将无法找到头文件。
4.JPG (62.94 KB)
2010-12-23 13:14


5.JPG (48.16 KB)
2010-12-23 13:14


6.JPG (57.7 KB)
2010-12-23 13:14


7.JPG (51.15 KB)
2010-12-23 13:14


可以添加多条路径,我一般会添加StellarisWare根目录和StellarisWare\boards\ek-lm3s8962这两个目录
Utilities下选择Use Target Driver for Flash Programming,下面的下拉框选择Stellaris ICDI;
之后点击OK,工程属性配置完成。

然后就是敲代码了。。。
首先File->New新建一个文件,点击保存,命名为main.c。
右键点击左侧的工程文件目录的文件夹,选择add files to group ...,将main.c加入工程。
将示例程序中的blinky.c代码沾到main.c中(偷懒了)。按F7编译。
8.JPG (122.06 KB)
2010-12-23 13:14


点Flash->Download下载。

这就是从新建工程到完成下载的流程了。。。


下面来研究研究这个例程,建议初学者先看一下数据手册的系统控制部分和GPIO部分,系统控制部分主要注意RCGC寄存器,GPIO主要注意DEN,DATA,DIR寄存器,其他寄存器大致了解一下就行了;

#include "inc/lm3s8962.h"    //LM3S8962的头文件,里面用宏定义了各个寄存器的地址以及寄存器各位的宏定义

int
main(void)
{
    volatile unsigned long ulLoop;    //定义了一个变量,变量名以ul开头表明变量类型是unsigned long,这是一个好习惯。。。
    SYSCTL_RCGC2_R = SYSCTL_RCGC2_GPIOF;    //将SYSCTL_RCGC2_R寄存器赋值为SYSCTL_RCGC2_GPIOF,这两个宏在lm3s8962.h中有定义,这句话执行之后系统将为GPIOF模块提供时钟。
    ulLoop = SYSCTL_RCGC2_R;        //给ulLoop随便赋个值,占用几个时钟周期,等待系统提供给GPIOF模块的时钟稳定,这样对DIR和DEN寄存器的赋值才能成功。
    GPIO_PORTF_DIR_R = 0x01;        //将PF0定义为输出端口
    GPIO_PORTF_DEN_R = 0x01;        //PF0数字使能,否则PF0将为高阻态;
    while(1)
    {
        GPIO_PORTF_DATA_R |= 0x01;    //PF0 = 1;小灯亮
        for(ulLoop = 0; ulLoop < 200000; ulLoop++)    //delay
        {
        }
        GPIO_PORTF_DATA_R &= ~(0x01);    //PF0 = 0;小灯灭
        for(ulLoop = 0; ulLoop < 200000; ulLoop++)    //delay
        {
        }
    }
}

相关帖子

沙发
lfzhou1006| | 2011-10-10 10:07 | 只看该作者
哈哈。谢谢啊。
不知这位大哥是嘛级别啦。菜鸟,高级,还是高高级啊。哈哈

使用特权

评论回复
板凳
opyy125689| | 2011-10-10 20:32 | 只看该作者
学习了

使用特权

评论回复
地板
sqcumt123| | 2011-10-12 18:06 | 只看该作者
LM3S的入门级教程不错,简单实用

使用特权

评论回复
5
loobin126| | 2011-10-13 09:57 | 只看该作者
:)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

470

帖子

2

粉丝