13回答

0收藏

[12月26日更新]关于Keil 创建LM4F120 新工程的问题

其他 其他 8245 人阅读 | 13 人回复 | 2012-12-20

本帖最后由 lxc115 于 2012-12-26 09:48 编辑

12月26日更新:
           又发现了问题,自己建的模板进不了中断,会卡住,而例程的就可以,不知如何解决?

12月23日更新:
     今天用自己建的模板检验了一下延时的精确性:系统时钟50M,设置延时值为SysCtlDelay(1000*1000*(50000000/3000000))=1s,发现模板的延时是准确的,每隔1s灯闪一下,而project0例程是每2s闪一下,这是不是说明例程有问题,而我自己建的模板没问题?
@suyong_yq  @shower.xu

          最近见几位坛友都在用各种IDE创建新工程,本人比较习惯用Keil,因此想用Keil也创建一个。
        正如suyong_yq在创建IAR工程框架时所说,例程中对于StellarisWare这个文件夹的文件结构过于依赖,导致用Keil打开例程时,即使选择Create Browse Information也无法通过Open Definition来查看相关函数、宏等在其他文件中的定义(貌似ROM_开头的可以)。
       把StellarisWare文件夹中的.h,.c等文件都拷贝出来,按照使用Keil的习惯建立新工程。这里没有使用suyong_yq的方法,使用库,而是直接使用了库的源文件。修改了相关编译错误之后可以顺利编译。
       但是此时碰到一个问题:用Keil打开Project0例程,编译下载之后,灯正常交替变化。而用创建的新工程,加入projec0源文件之后编译下载,发现两个的时间间隔是不同的。延时同样的时间,例程比新工程长一倍时间。
       随后又试了几下,例程中使用的是PLL,然后分频至50MHz,如果新工程中将分频系数加倍,则延时一样。但是无论打开Blinky例程还是用新工程创建Blinky例程,延时就又一样了,难道是因为Blinky没使用库的原因?之后又试了timer的例程,发现ROM_打头的好像也没问题。
      总结一下,就是例程和新工程同样的例子但是延时不一样的问题。怀疑可能是新工程中哪里设置的有问题,导致实际频率高了一倍,暂时还找不到原因。可能的话使用suyong_yq的方法,使用库来建工程,不知道问题能不能解决。
      不知各位坛友有什么高见?

分享到:
回复

使用道具 举报

回答|共 13 个

倒序浏览

沙发

shower.xu

发表于 2012-12-20 11:59:22 | 只看该作者

1、用lib文件会加快编译速度,但是你就无法通过Open Definition来查看相关函数源码。
2、“例程和新工程同样的例子但是延时不一样的问题”,示波器看的还是Keil的逻辑分析器看的,晶振值设对了么?
板凳

GY@艳

发表于 2012-12-20 13:10:57 | 只看该作者

dlyt03 发表于 2012-12-20 11:39
抢沙发!

这个也行啊
爱板  爱板  爱板     https://www.cirmall.com
地板

suyong_yq

发表于 2012-12-20 15:51:08 | 只看该作者

如果直接复制源文件创建工程,要确定两个问题:
(1)是否复制了正确的源程序文件
(2)是否调用了正确的函数执行操作
存在这种原因的可能在于,StellarisWare中集成了N多种芯片,即使同样是LM4F,也有LM4F120和LM4F232两种不同的型号。清风板主的LM4F教程是以LM4F232为硬件平台的,例程中使用的库函数没有“ROM_”前缀,而LM4F120的库函数是有“ROM_”前缀的。但由于两款芯片有着极为相似的寄存器映射,因此,即使混用也不容易发现。
LZ根据具体情况再分析一下,确保提到的两个要点没有问题。
5#

lxc115

发表于 2012-12-20 18:19:08 | 只看该作者

shower.xu 发表于 2012-12-20 11:59
1、用lib文件会加快编译速度,但是你就无法通过Open Definition来查看相关函数源码。
2、“例程和新工程同 ...

就直接从灯闪的频率上就直观地能看到差大概一倍的样子
6#

lxc115

发表于 2012-12-20 18:25:21 | 只看该作者

suyong_yq 发表于 2012-12-20 15:51
如果直接复制源文件创建工程,要确定两个问题:
(1)是否复制了正确的源程序文件
(2)是否调用了正确的函 ...

源文件应该是复制的对的,复制了driverlib、inc文件夹中的.c,.h文件。
照你的说法,我觉得应该是没有调用到正确函数。
但是我建工程使用的main函数还是project0的main函数,没有作改动,就直接加入工程了,里面就是没有ROM_前缀的。难道是因为这个问题?
7#

xiongse

发表于 2012-12-24 23:58:16 | 只看该作者

我也发现这个问题了。。。找到一个解释,不知道对不对

引用
可能是没用发挥到MCU的哈佛结构性能
哈佛结构是ROM与RAM同时提取数据的,如果只用到RAM上面,那运行就直接影响了吧,还有TI的ROM是单周期指令,那不存在运行速度跟不上的问题。以上是个人理解
8#

lxc115

发表于 2012-12-25 09:26:41 | 只看该作者

chuaizicai 发表于 2012-12-24 23:58
我也发现这个问题了。。。找到一个解释,不知道对不对

引用

什么意思,没看明白
9#

cn_x

发表于 2013-1-12 16:53:54 | 只看该作者

我也发现了同样的问题,不解,静待高手解惑
10#

cn_x

发表于 2013-1-14 12:45:39 | 只看该作者

ROM_SysCtlClockSet(SYSCTL_SYSDIV_4|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|
                    SYSCTL_OSC_MAIN);
ROM_SysCtlDelay(SysCtlClockGet()/3);

SysCtlClockSet(SYSCTL_SYSDIV_4|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|
                    SYSCTL_OSC_MAIN);
SysCtlDelay(SysCtlClockGet()/3);

相比延时时间在板子上反映的要相差一倍:第一个延时是1秒,第二个是2秒
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条