|
本帖最后由 azhiking 于 2014-12-24 00:39 编辑
前些日子家里出了些事情,答应maylove的事情迟迟没有能完成,很抱歉,接下来的时间我会把本版中大家遇到的问题汇总在这个贴子中,当然都是得到解决的问题,便于大家遇到同类问题时候进行查找和参考。
尽管M3已经不再供货,但是由于M3和M4在使用上差异不大,很多M3上解决问题的方法在M4上也能够用到,所以把M3上的问题一并汇集于此。还有一些是初学者经常会遇到的问题,也一并放于此
由于本版帖子较多,所以此贴我会不断地更新的。另外,也许漏掉了大家关注的问题,可以回帖指出,谢谢!
1. Q: StellarisWare Graphics Library除了库中的LCD驱动,市面上其他的驱动都支持吗?
A: 凡是使用SSD2119 或ILI9320 驱动器的LCD,你都不需要自己编写底层驱动。
而对于其他类型的驱动器的底层驱动,你可以参考上面提到的那两种驱动器的底层驱动,进行简单修改即可。
TI StellarisWare Graphic Library 的是实现是分层的,只需修改最底层的与硬件操作相关的驱动文件即可。
2. Q: 有没有直接读写8bit端口的方法,就像以前的51单片机那样,P0=0xff,等等。谢谢!
A: GPIOPinWrite(GPIO_PORTA_BASE, 0xFF, dat);
3. Q: 8962数据手册说CMOD0和CMOD1两个管脚应该连接到地。请问,如果没有接地,会有什么影响?
A: CMOD0和CMOD1测试模式控制管脚.定义了 CMOD0和CMOD1两个管脚,生产过程中Luminary Micro用它们来测试器件。 这两个管脚没有最终用户功能,不能被使用。 CMOD管脚应该连接到地。这两个管脚如果不接地,可能会损坏芯片。因为这个两个关键是输入脚,器件手册建议没用的输入管脚接地或VCC,可以提供工作稳定性。但是,如果你这两个管脚没接地,应该不会引起芯片不能正常启动的问题!
4. Q: LM3S3739 SSI初始化调用外设库设置IO为SSI方式,则进入FaultISR?1.
// PA2 SSI0CLK(SSCK)
GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_2);
// PA4 SSI0RX(MISO)
GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_4);
// PA5 SSI0TX(MOSI)
GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_5);
2.
GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_2 | GPIO_PIN_4 | GPIO_PIN_5);
GPIOPadConfigSet(GPIO_PORTA_BASE, GPIO_PIN_2 | GPIO_PIN_5 ,
GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD);
都不行,请问问题出在那里?
A:没有允许SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
5. Q: GPIODirModeSet(GPIO_PORTF_BASE, GPIO_PIN_2 | GPIO_PIN_3, GPIO_DIR_MODE_HW);
这个里的GPIO_PIN_2 | GPIO_PIN_3代表的是那个管脚呀,为什么要或一下。
A: 代表F口第二脚和第三脚,同时将PF2和PF3设置成高阻态
6. Q: 请问LM3S能与HC、LS等类型的5V芯片直接连接么?
A: 正常工作电压是3.3V,是不能接5v的电压,但有部分GPIO是可以接5V 电压,比如有些输入信号是5v的电平,是可以接的.但一定要根据手册看明白那些GPIO是可以接5V的.需要仔细看一下相关型号的datasheet
7. Q: 用51做数字电压表或者使用AD时,因为用的USB供电电压不是标准,所以测出来的电压会有偏差,M3也会遇到这个问题吧,是如何解决的呢?
A: 如果对ADC精度要求很高,建议外接参考电源,例如TI 的REF5025,REF5030,xxxx,具有LOW NOISE,HIGH ACCURACY,Low Temperature Drift: 20 ppm/°C,HIGH OUTPUT CURRENT: ±10mA,WIDE SUPPLY: 3.25V to 18V。
如果对精度要求,一般,M3可以使用内部ADC参考,该参考是通过LDO输出,参考电压的稳定性稍微比外部参考弱些,但是精度也是可以的。
8. Q: 8-mA驱动的斜率控制,为什么说是斜率控制?它与2,4有什么不同,与2有什么应用不同??
A: 斜率控制,说白了就是上升沿时间,在一些总线中,还有一些芯片,都要求了信号上升沿时间,如果上升沿时间过长,可能导致数据错误,但如果用很高的斜率,也就是很短的上升沿时间,可能导致芯片过大的功耗,这都是我们不希望看到的。因此在硬件设计的时候就想找一个最佳值,及顾及了上升沿时间,也顾及了设备功率。但是在产品初期,可能无法遇到到所有可能的情况,等设备卖出去了才发现电流设置不正确,这时候我们就希望能以最少成本解决这个问题。对设备召回肯定是不现实的,如果芯片能软件调整,我们就可以仅更新固件即可达到调整设备的要求。
9. Q: 想请教下坛友, Stellaris系列cortex-M3的片内外设的中断是怎么实现的?希望能以IO口中断为例子,说下代码运行的过程,希望能具体点。
还有ARM内核的中断又是怎么个跳转过程,比如SysTick的的中断。
A: 每种处理器都会在手册中说明中断地址的顺序,而这个顺序很重要,每次发生中断的时候就会去相应地址提取处理函数,也就是说这个中断向量的地址处存放的是我们的中断函数.默认的RAM或者FLASH在系统启动后从地址0处读取数据这个时候 存放了堆栈的初始化,然后是复位中断,这个时候程序跳转到main函数执行,
DCD StackMem + Stack ; Top of Stack
DCD Reset_Handler ; Reset Handler
DCD NmiSR ; NMI Handler
DCD FaultISR ; Hard Fault Handler
DCD IntDefaultHandler ; MPU Fault Handler
DCD IntDefaultHandler ; Bus Fault Handler
DCD IntDefaultHandler ; Usage Fault Handler
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD IntDefaultHandler ; SVCall Handler
DCD IntDefaultHandler ; Debug Monitor Handler
DCD 0 ; Reserved
DCD IntDefaultHandler ; PendSV Handler
DCD SysTick_ISR ; SysTick Handler
以上内容为字对齐,当发生SysTick 定时中断时就会到到 SysTick_ISR所在的地址执行这个函数,对于PC,LR,SP的操作C广语言是不需要操作的
10. Q: 请问M4的FPU浮点运算单元需要在CCS中设置吗,为什么软件开启FPU没用?
A: CCS编译器是默认开启了FPU功能,在propertise——bulid——arm compiler——processor options 里的specify floating point support里配置,默认为FPv4SPD16 。如果编译器使能了FPU功能,而芯片未开启FPU单元,程序运行到浮点语句时就会出现异常。相反,如果编译器未使能FPU功能,芯片即使开启了FPU单元,程序还是会按照未使能FPU的代码进行处理。
一旦选择“use FPU”功能,如果代码中带有单精度浮点运算的代码,编译器就会使用带V的FPU单元汇编指令,无论芯片是否开启了FPU单元功能。如果选择不使用FPU功能,即使芯片开启了FPU单元,编译器一样不会采用带V的汇编指令。
可参考文档:
简单介绍Cortex M4 FPU 单精度浮点运算单元.docx
(469.1 KB, 下载次数: 7)
|
|