[原创] 菜鸟学习笔记1

blackwc2006   2010-12-23 13:14 楼主
当我还是个纯菜鸟的时候,发现论坛上的很多帖子都看不懂,现在我已经由纯菜鸟变成一般菜了,在这写点东西给纯菜鸟,希望能帮助他们快速入门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
之后MDK会提示是否将Startup代码加入到工程中,选择是。一个空工程建好了。
2.JPG
下面配置工程属性。
选择Project->Options for Target 'Target 1'弹出如下对话框
3.JPG
Target下Xtal设为8.0,这是告诉编译器板子上主晶振的频率;
C/C++有个Include Paths框,这里是编译器查找include文件的路径,如果没有指定路径,编译器将无法找到头文件。
4.JPG
5.JPG
6.JPG
7.JPG
可以添加多条路径,我一般会添加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
点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
        {
        }
    }
}


回复评论 (6)

程序虽然简单 一步一步走扎实

支持下

点赞  2011-2-21 17:28
支持
点赞  2011-7-13 19:03
支持下
点赞  2011-7-14 09:09

回复 楼主 blackwc2006 的帖子

楼主的帖子对身为菜鸟的我很有帮助呀!!!!
点赞  2011-8-14 18:26
点赞  2012-3-6 17:12
楼主的学习系列很有帮助。
点赞  2012-9-15 15:50
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复