本帖最后由 reayfei 于 2011-12-3 13:57 编辑
LM3S811使用心得—从零开始学Cortex-M3内核单片机(二)
关于EK-LM3S811的问题集锦
1,LM3s811有什么优势?
LM3S3xx,6xx,8xx是Stellaris里面配置最平民化的产品。这个系列不带USB,CAN,Enet接口。而LM3S811这颗芯片在这个系列中是比较有代表性的一款。所以:
1. LM3S811因不带高级外设,是作为入门级的比较好的一个选择。
2. 使用LM3S811开发入门或者完成设计以后,可以pin topin向下兼容LM3S6xx,3xx的软件代码。
3. 还有,性价比高。
4. 显然是我们的主推产品,我们称之为Hero Product。
5. 主推产品,性价比高,当然出货量大咯。
2,EK_LM3S811为何要设置那么多过孔?
在走线时候上下两层的地应该打上均匀分布,数量适当的过孔,以减少上下层的电容效用。
3,EK_LM3S811移植μCOSII有什么好处?
到ucos的官网上有现成的TI M3版本,不用移植。(它提供的IAR版本的,MDK的没有。)
4,EK_LM3S811上的白条是液晶么?
不是,是导光板。
5,请教EK-LM3S811用作调试器调试外部芯片要怎么弄?
可以通过jtag口对外进行仿真。不要外接jtag来仿真开发板,开发板的jtag口是对外仿真的,如果接在一 起,连个jtag仿真电路会有冲突。
6,LM3S811串口下载程序问题?
LM3S811开发板中自带boot_serial中,自动检测某个GPIO引脚(该引脚的作用是接收更新程序的信号)是被屏蔽掉的。出厂的芯片中的boot_serial只检测2K(默认的应用程序起始位置)处是否存在有效的堆栈指针和复位向量,如果有的话则执行应用程序,如果没有则调用接收更新程序的代码(当然刚出厂的芯片2K后是不会有应用程序的,所以刚出厂的芯片第一次连串口用LM Flash Programmer下载程序是没有问题的),但是第一次用串口下载程序后(从2K处写)就不满足再调用接收更新程序的代码的条件了(2K处已经有了有效 的堆栈指针和复位向量),所以就不能下载程序了。我想问的是为什么芯片在出厂时不把检测某个GPIO口作为更新程序的信号打开呢?如果想多次下载程序,芯 片第一次必须下载自己定义的boot_serial,这样的话,每个芯片就必须下载两次程序(一个改写后的boot_serial,一个自己的应用程序, 感觉写两次很麻烦),有没有好的解决办法呢?
解答:1. 我想问的是为什么芯片在出厂时不把检测某个GPIO口作为更新程序的信号打开呢?出厂时并不知道客户用哪个GPIO方便,这个是可以自定义的。
2. 如果想多次下载程序,芯片第一次必须下载自己定义的boot_serial,这样的话,每个芯片就必须下载两次程序(一个改写后的boot_serial,一个自己的应用程序,感觉写两次很麻烦),有没有好的解决办法呢?谢谢了。
811没有内置ROM Software,出厂烧在flash的bootloader,应该是引导到从0开始的flash地址的,并不是2k地址开始,也就是说,你使用出厂的bootloader烧写完程序后,出厂的bootloader就被覆盖了。dustdevil系列以后的产品,内置ROM中有bootloader,可以通过程序设定检测某个GPIO来触发下载程序。
7,通过LM3S811采集的数据能不能通过keil软件调试?ADC的采样序列到底是什么意思啊?
可以看相应的寄存器,来查看采样到的数值。采样序列,会按照预先配置的顺序来自动进行采样,减轻 CPU 负荷,且能配置优先级。
8,LM3S811可以用ARM指令编程吗?
M3只支持thumb-2指令集。
9,LM3S811的PWM输出问题?
用MDK写了一个LM3S811的PWM输出程序,有个疑问:
//Set PWM Pulse Wideth
PWMPulseWidthSet(PWM_BASE, PWM_OUT_0, 0); //设置PWM的脉冲宽度
PWMPulseWidthSet(PWM_BASE, PWM_OUT_1, 1);
PWMPulseWidthSet(PWM_BASE, PWM_OUT_2, 12000);
PWMPulseWidthSet(PWM_BASE, PWM_OUT_3, 23998);
PWMPulseWidthSet(PWM_BASE, PWM_OUT_4, 23999);
PWMPulseWidthSet(PWM_BASE, PWM_OUT_5, 24000);
PWM频率设置成了250Hz,对应于24000个时钟周期,当脉宽宽度设置成0、23999、24000,PWM出来都是高电平,如下图所示:MDK自带的Logic Analyzer
file:///C:/DOCUME%7E1/reayfei/LOCALS%7E1/Temp/msohtml1/01/clip_image003.gifPWMTest.jpg (177.91 KB)
2011-6-24 12:08
那PWMPulseWidthSet(unsigned longulBase, unsigned long
ulPWMOut,unsigned long ulWidth)的脉宽值设置成什么的时候,才会有全低的电平出来呢?
继续弄了一下,发现可以通过PWMOutputState(PWM_BASE,PWM_OUT_0_BIT, false)出来低电平,不知还有没有其它方法:
// Enables the PWM generator block.
PWMGenEnable(PWM_BASE, PWM_GEN_0); //使能PWM发生器,开始产生PWM波
PWMGenEnable(PWM_BASE, PWM_GEN_1);
PWMGenEnable(PWM_BASE, PWM_GEN_2);
SysCtlDelay(0xffff);
PWMOutputState(PWM_BASE, PWM_OUT_0_BIT, false);
PWMOutputState(PWM_BASE, PWM_OUT_1_BIT, false);
PWMOutputState(PWM_BASE, PWM_OUT_2_BIT, false);
PWMOutputState(PWM_BASE, PWM_OUT_3_BIT, false);
PWMOutputState(PWM_BASE, PWM_OUT_4_BIT, false);
PWMOutputState(PWM_BASE, PWM_OUT_5_BIT, false);
SysCtlDelay(0xffff);
PWMOutputState(PWM_BASE, PWM_OUT_0_BIT, true); //使能PWM输出
PWMOutputState(PWM_BASE, PWM_OUT_1_BIT, true);
PWMOutputState(PWM_BASE, PWM_OUT_2_BIT, true);
PWMOutputState(PWM_BASE, PWM_OUT_3_BIT, true);
PWMOutputState(PWM_BASE, PWM_OUT_4_BIT, true);
PWMOutputState(PWM_BASE, PWM_OUT_5_BIT, true);
while(1)
{
;
}
10,LM3S811设置pll问题
SysCtlClockSet(SYSCTL_SYSDIV_10| SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_6MHZ);
设置以后为什么系统时钟总是显示32.4MHz ?
设置PLL之前必须先将LD0设置为2.75V 设置结束以后再设置为2.50V,如果你不设置LDO应该是PLL不生效的。
11,lm3s811不用U-cos如何实现多任务
一个在cortex-M3上运行的操作系统,已经过数十个产品验证。
12,LM3S811 FIFO接收
我把接收FIFO设为了4字节触发,PC一下发了6个字节数,想请问下剩下的两个在什么时候会收到呢,还有就是我在中断接收中处理收到的4个字节时剩下的两个会不会丢失呢???
uart的FIFO是16个字节,设置4字节触发,只是FIFO中超过4字节触发中断,不影响后面字节的接收;如果FIFO中收到16个字节,还不把数据取走,才会丢失数据。
13,LM3S811中防JTAG失效的函数中有个KEY,这个key有何用
按住按键,程序就不向下运行了,也就不会执行锁住jtag的程序。
|