[原创] LM3S811 uart0

David_Lee   2011-5-11 16:12 楼主

上一贴:跟着套件光盘入门LM3S811

https://bbs.eeworld.com.cn/thread-290441-1-1.html

 

刚拿到手一看,以为白色那块是LCD来的,细看一眼,原来就是一块塑料板导光板而已。之前看到带OLED Display的LM3S811,原来是另有其板。后来看了光盘里的例程,也是从带OLED Display的Kits例程里修改出来的。

 

EK-LM3S811自带了Key、LED和FT2232D虚拟出来的串口,所以说此评估板更类似于最小系统板。原理图可翻阅上贴附件:EK-LM3S811套件光盘\Hardware\WPI-EK-LM3S811_SCH_V011_0712.pdf

 

FT2232D虚拟出来的串口是已经跟LM3S811的uart0连接的,所以,基于uart0的程序都可以直接用这个Stellaris virtual serial COM port。

端口号修改可借鉴下帖:

https://bbs.eeworld.com.cn/viewthread.php?tid=237823&page=1&fromuid=194149#pid827620

 

下面说说我建立工程的步骤:

前提:把TI给的StellarisWare_for_EK-LM3S811解压出来发在一起,我这里放在G:\Documents\LM3S811。

文件路径.jpg

 

1、新建一个工程,Device是Luminary Micro的LM3S811。

2、Project -> Option for Target……或者按快捷键Alt+F7。在Target标签里,Xtal输入板子对应的晶振6MHz,这个设置错了的话,可能会导致程序下载不了。

晶振.JPG

3、Output标签里,Create Hex File根据需要勾选。Select Folder for Object根据需要选择。

4、C/C++标签里,在Include Paths里添加..\;这里有解释一下为什么要添加这个点+点+斜杠。

Include.JPG

在我们程序里,有这么一段头文件包含:

#include "inc/hw_types.h"
#include "inc/hw_memmap.h"
#include "driverlib/gpio.h"
#include "driverlib/uart.h"

inc/和driverlib/表示那两个是文件夹。因为使用的双引号,而不是尖括号,编译器一般会默认在工程目录下的inc和driverlib文件夹里寻找那4个.h头文件。这里是G:\Documents\LM3S811\uart0:

文件.JPG

我们可以看到,该文件夹下面并没有inc、driverlib这两个放置hw_types.h、hw_memmap.h、gpio.h、uart.h头文件的文件夹,如果没有这个..\,编译器在工程路径下找不到需要的头文件,就会报错。但是增加了这个..\之后,表示include的路径包含了上一级目录,也就是下图的路径:

文件路径.jpg

这样编译器就会在G:\Documents\LM3S811目录下找inc和driverlib文件夹,并到里面搜寻需要的hw_types.h、hw_memmap.h、gpio.h、uart.h四个头文件。找到了,就不会报错了。所以,如果你新建工程的时候看到提示没有定义undefined等错误,请先查看文件包含是否正确。

顺便说一下,如果头文件改成下面,编译器也是可以找到需要的头文件的。(注:左斜杠\和右斜杠/,在编译器MDK里作用是一样的)

#include "..\inc/hw_types.h"
#include "..\inc/hw_memmap.h"
#include "..\driverlib/gpio.h"
#include "..\driverlib/uart.h"

..\inc/表示在工程路径的上一级目录里的inc文件夹,应包含hw_types.h和hw_memmap.h。但很明显,通过修改include paths更为方便。

5、在Debug标签和Utilities标签里选择Stellaris ICDI。

 

经过以上步骤,Option基本设置完毕。

 

6、新建uart0.c并add到工程里,编译一下,会发现有好多undefined symbol,这是编译器在说那些函数没有定义到。这是因为我们用到了GPIOPinTypeGPIOInput等很多函数,虽然在.h文件有定义了,但是并没有找到函数原型。这时有两种方法可以解决。

一是我们常用的.c方法,就是跟刚刚uart0.c一样,把用到的.c源文件add进来,很明显,编译是通过的:

c文件.JPG

二是使用.lib文件的方法。

在G:\Documents\LM3S811\driverlib下面,我们可以看到,里面有个MDK工程文件driverlib.uvproj,打开后,在option里,我们可以看到,它编译产生的是Create Library。

lib.JPG

在G:\Documents\LM3S811\driverlib\rvmdk下面,我们可以看到编译产生了driverlib.lib这个文件。而且翻遍它所有的C函数,居然都没有main函数。

其实这是常见的一种方法,就是引用库文件的方法。

库文件实际上是跟往常一样新建一个工程,在option里选择了Create Library,这种工程是不能有main函数的,编译后,MDK会把所有的函数编译封装在.lib文件里,以后我们需要用到那些C函数的时候,只需要把lib文件add到工程里,就可以直接调用。如图所示:

libresult.JPG

使用lib文件的好处是,因为lib是已经编译过的文件,所以不像使用c文件那样费事,使用c文件每次都重新编译,产生.o等很多中间文件。因而lib文件会大大减少工程编译时间。

另外,使用lib文件,不需要提供源码c文件给别人,起到了一定的保密效果。只需要把lib及函数的说明和使用方法交给用户,用户直接调用即可。

注意:.lib文件并没有包含宏定义等信息,所以,和.lib配套的.h文件是不能省掉的。

 

搞定了.h和.lib,新建自己的工程便是easy job啦。剩下开发LM3S的工作难点便是面对纷繁API函数,怎么去使用了。

 

附件:

LM3S811uart0附件.rar (2.28 MB)
(下载次数: 904, 2011-5-11 16:12 上传)

uart0的MDK完整工程文件(含针对此板验证可行的Jtag防锁死程序)

FT2232配置软件MProg3.0_Setup.exe

FT2232中文资料.pdf

uart0.jpg

回复评论 (30)

手把手教你TI M3驱动库编程

引用: 原帖由 David_Lee 于 2011-5-11 16:12 发表 上一贴:跟着套件光盘入门LM3S811 https://bbs.eeworld.com.cn/thread-290441-1-1.html   刚拿到手一看,以为白色那块是LCD来的,细看一眼,原来就是一块塑料板导光板而已。之前看到带OLED Display的LM3S811, ...

 

修正:补图,可能因为用的是同一个图,上面的给系统忽略掉了。

我们可以看到,该文件夹下面并没有inc、driverlib这两个放置hw_types.h、hw_memmap.h、gpio.h、uart.h头文件的文件夹,如果没有这个..\,编译器在工程路径下找不到需要的头文件,就会报错。但是增加了这个..\之后,表示include的路径包含了上一级目录,也就是下图的路径:

文件路径.jpg

点赞  2011-5-11 16:18

手把手教你TI M3驱动库编程.pdf (738.93 KB)
(下载次数: 735, 2011-5-11 16:43 上传)

点赞  2011-5-11 16:43
谢谢分享
点赞  2011-5-11 17:37
大卫 在么
点赞  2011-5-11 20:22
楼主,请教一下,在第一楼层中讲到:
3、Output标签里,Create Hex File根据需要勾选。Select Folder for Object根据需要选择。

这里要选择什么?
点赞  2011-5-15 11:26
我在网上查的:
编译生成 的文件都有作用的,不可能将其全部删除,但是可以设置其生成的目录。
方法如下:
在勾选生成Hex的相同页面中( Output 标签页 Create HEX File)上方有一个“Select Folder for Object...”按钮,点击后设置到一个新的文件夹下(例如 当前工程文件夹\Debug)
在与 Output 标签页同个弹出窗口的另一个标签页Listing 标签页中同样有“Select Folder for Object...”按钮,点击后设置到一个新的文件夹下(例如 当前工程文件夹\Debug)

这样设置以后你那些所谓的垃圾文件就都放在一个你不使用 的文件夹下了,不会影响你查看源代码。


现在明白了
谢谢 啊
点赞  2011-5-15 12:51

引用: 原帖由 heningbo 于 2011-5-15 12:51 发表 我在网上查的:编译生成 的文件都有作用的,不可能将其全部删除,但是可以设置其生成的目录。方法如下:在勾选生成Hex的相同页面中( Output 标签页 Create HEX File)上方有一个“Select Folder for Object.. ...

 

bingo

还有一个是在option -> user -> run user programs after build/rebuild里添加fromelf --bin --output uart0.bin uart0.axf这样的语句,生成bin文件。因为有些isp下载工具那些,不支持hex的,得用bin文件。

 

至于那灯六个RGB灯会亮,是因为GPIO默认设置的问题,我的也会亮,O(∩_∩)O~。

  • bin.jpg
点赞  2011-5-15 13:41

回复 4楼 David_Lee 的帖子

感谢楼主。痛哭流涕啊
点赞  2011-7-14 22:36

回复 8楼 David_Lee 的帖子

求unit1啊
点赞  2011-7-14 22:38
引用: 原帖由 heningbo 于 2011-5-15 11:26 发表
楼主,请教一下,在第一楼层中讲到:
3、Output标签里,Create Hex File根据需要勾选。Select Folder for Object根据需要选择。

这里要选择什么?

在这里你可以选择你的输出文件放置的文件夹 例如 .o .hex
点赞  2011-7-29 11:03
引用: 原帖由 David_Lee 于 2011-5-15 13:41 发表

 
bingo

还有一个是在option -> user -> run user programs after build/rebuild里添加fromelf --bin --output uart0.bin uart0.axf这样的语句,生成bin文件。因为有些isp下载工具那些,不支持hex的,得用 ...

这个学习了。 生成bin~~
点赞  2011-7-29 11:05

请教

David Lee
我想要你的QQ号,有问题向你请教,要不你加我吧,297182261
点赞  2011-10-8 23:01

引用: 原帖由 changhuawang 于 2011-10-8 23:01 发表 David Lee 我想要你的QQ号,有问题向你请教,要不你加我吧,297182261

 

已添加好友

点赞  2011-10-9 22:23
辛苦了!
点赞  2011-10-19 11:30
很好啊
点赞  2011-10-24 17:21
请问LZ如何烧写程序啊?菜鸟求具体操作
点赞  2011-10-25 15:46
恩  很好的811心得,感谢楼主
点赞  2011-10-29 20:28

zz

请问  uart0.sct是什么文件啊,我建的工程里怎么没有啊?
点赞  2011-11-18 19:25
我当时玩LM3S811的时候也是最初做的uart,很好玩,还上传了一个我自己做的步骤,还有我的学习心得呢,跟楼主的差不多,呵呵
我爱电子!
点赞  2011-11-18 20:13
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复