msp430常见问题汇总

上传人:wt****50 文档编号:37690711 上传时间:2018-04-21 格式:PDF 页数:68 大小:617.45KB
返回 下载 相关 举报
msp430常见问题汇总_第1页
第1页 / 共68页
msp430常见问题汇总_第2页
第2页 / 共68页
msp430常见问题汇总_第3页
第3页 / 共68页
msp430常见问题汇总_第4页
第4页 / 共68页
msp430常见问题汇总_第5页
第5页 / 共68页
点击查看更多>>
资源描述

《msp430常见问题汇总》由会员分享,可在线阅读,更多相关《msp430常见问题汇总(68页珍藏版)》请在金锄头文库上搜索。

1、LSD MCU TECHNOLOGY CO., LTD .利尔达单片机技术有限公司WWW.LIERDA.COM公司地址:杭州市登云路 425 号杭州利尔达科技大厦 Tel:0571-88800000 Fax:0571-89908519第1页 共68页利 尔 达 科 技 有 限 公 司利 尔 达 科 技 有 限 公 司技术一部技术一部LSD SCIENCE 当对同一变量开辟的尺寸是 1024 字节,而其它均未改变时,程序总占用 4.0K 左右 RAM 空间,可以正常烧到芯 片中,却无法运行! A6:方法一 将一些变量定义成 no init 类型 方法二 修改 IAR 的 cstartup.s43

2、 程序,具体方法如下: (iar310a 为例) 1 将 cstartup.s43 程序加载到用户自己的项目中,cstartup.s43 在 iar310a 的路径如下$TOOLKIT_DIR$srcLIB 2 修改 cstartup.s43 中的_program_start 子程序,加入关闭看门狗的命令 MOV #0x5A80, 对吗? A1:430 不能位寻址,所以一般的位操作,都通过“与”来作用。#defineLCD_cs1(P2OUT 偏移量可变址寻址 MOV X(PC), Y(PC); 怎么理解?A6:MOV PC+, X(PC); 将 PC 所指单元的内容送给 PC+X 所在单元,

3、然后 PC 本身加 1,指向相邻的下一单元. MOV X(PC), Y(PC); 将 PC+X 所指单元的内容送给 PC+Y 所在单元问题7:数据类型Small,Medium,Large的区别,以及怎么访问大于0X10000的地址空间? 数据放在大于 0X10000 的地址空间中,怎么去访问?同时 Small,Medium,Large 在何处可以体现它们的区别? A7: 可以访问。值得注意的是 option 里的 General Option 选项内的数据类型得选择 Large,程序大小,RAM 使用,运行速度都不一样。 1.F5XX 430X 2.选择 Large small medium

4、产生效果是改变指针变量所占字节个数.IAR 中指针变量默认 2 个字节,选择 large 占用 4 个字节,那么指针就可以访问超过 64K 范围的地址. 3.可以采用 IAR 内部函数, */ void _data20_write_char (unsigned long _addr, unsigned char _value);void _data20_write_short(unsigned long _addr, unsigned short _value);void _data20_write_long (unsigned long _addr, unsigned long _value

5、);unsigned char _data20_read_char (unsigned long _addr); unsigned long _data20_read_long (unsigned long _addr);Q8:关于堆栈问题 问题:Errore16: Segment CSTACK (size: 0x50 align: 0x1) is too long for segment definition. At least0x4 more bytes needed. The proem occurred while processing theLSD MCU TECHNOLOGY CO

6、., LTD .利尔达单片机技术有限公司WWW.LIERDA.COM公司地址:杭州市登云路 425 号杭州利尔达科技大厦 Tel:0571-88800000 Fax:0571-89908519第13页 共68页segment placement command “- Z(DATA)CSTACK+_STACK_SIZE#“, where atthe moment of placement the ailae memory ranges were “CODE:5B4- 600“ 请问:这个错误是什么意思A8:将 stack 设置减小,可通过编译,这时 stack 是静态的. 而会不会出错不是 st

7、ack 设置问题,而是在程序运行时,动态中,RAM 占用量大小所定. 减少程序中的变量个数,变量类型尽量小,够用就可以, 能减少动态运行时 RAM 的占用量.Q9:浮点数运算问题,既然2.2A编译器能实现64浮点位运算,那么它的运算程序在哪个文档里。 A9:要使用 64 位的浮点运算需要设置编译器 首先选择 project- option- general- target- doue floating point size 选中 “64“ 再选择 project- option- XLINK- include- library- cl430d.r43 用 c+的朋友要选择 dl430d.r43

8、 库 建议用整型数进行运算,比如像开方,64 位浮点数要用几十毫秒,而整型数随数据大小只要几微秒到几毫秒不 等。Q10:局部变量的问题,在中断服务程序中开中断响应其他中断,发现中断服务中定义的局部变量老被改动, 换成全局变量没问题。想问一下这是啥原因?还想问一下c编程过程中应注意的细节? A10:局部变量只是暂存变量,一般编译器会使用通用寄存器来保存这个变量值,汇编编程的话需要圧栈操作, C 语言编程的话建议把变量申明为全局或者静态。LSD MCU TECHNOLOGY CO., LTD .利尔达单片机技术有限公司WWW.LIERDA.COM公司地址:杭州市登云路 425 号杭州利尔达科技大厦

9、 Tel:0571-88800000 Fax:0571-89908519第14页 共68页第三章:代码编程类第三章:代码编程类Q1: 我在一个子程序中定义了一个变量,是在其头文件中定义的,然后在主程序中包含了此头文件,当在主 程序中引用此变量时 ,编译器没有报错,但是要 DEBUG 时出错了,告诉我是 redefine in main,请问这是 怎么回事呢? A1:肯定不能这样用了,相当于重复定义了用外部变量声明可以解决这个问题你可以在头文件中申明(加 extern),在 C 文件中定义。Q2:这是我的接收函数,但是当我发送 ko 时,收到两个 o,发送 ok 时收到两个 k,这是怎么回事呢。

10、 #pragma vector=UART1RX_VECTOR _interrupt void usart1_rx (void) unsigned j; /IFG2 for (j=0;j1); /左移一位 #pragma vector = TIMERA0_VECTOR /TA 中断 _interrupt void TA_start(void) flag=1; /中断时间到,设置标志位 TA0 的时钟选用 0.5M 8 分频,近似计数值 63 为 1ms,使用连续计数方式。 A3:void data_send (unsigned char send) unsigned char i; for (i

11、=0;i1); /左移一位LSD MCU TECHNOLOGY CO., LTD .利尔达单片机技术有限公司WWW.LIERDA.COM公司地址:杭州市登云路 425 号杭州利尔达科技大厦 Tel:0571-88800000 Fax:0571-89908519第16页 共68页 #pragma vector = TIMERA0_VECTOR /TA 中断 _interrupt void TA_start(void) flag=1; /中断时间到,设置标志位 TACTL 中的 MC1、MC0 为 01 值Q4:求 msp43 的 pwm 捕捉下降沿的程序。 A4:TACCTL2=CM1+CCIS

12、_1+CAP;/ 同步捕获模式,下降沿捕获 TACTL=TASSEL_2+MC_2+TACLR;/ 连续计数方式,时钟设置为 SMCLK I/O 口也需要设置为第二功能口,建议看 users guide 和 TI 例程。Q5 : C文 件LINKER后 , 报 错Errore46:Udefinedexternal“send1_buff“referredin sys_evet(D:sc1DebugObjsys_evet.r43,请教如何可解决此问题,变量 send1_buff 在文件里已定义了 extern。 A5:查看一下你的程序编译时先编译哪个文件,或在这个文件前先申明一下。Q6::DINT

13、MOV.W #FWKEY+WRT, Write bit = 1MOV.W #FWKEY+FSSEL0+FN0+FN1, Lock = 1EINTRET想保存信息,R12 是地址,1080,R14 是内容,但是通过按键改变参数后,INFO 写入的确实 0,而不是要保存 的数据。很奇怪。为什么不管什么数据,到 INFO 里都是 0? A6:原因在于你只改变单个字,而 FLASH 是要整段擦除,然后在更改。MOV.W #FWKEY+FSSEL0+FN0+FN1,UCTL0 UCTL0 |=CHAR;LSD MCU TECHNOLOGY CO., LTD .利尔达单片机技术有限公司WWW.LIERDA

14、.COM公司地址:杭州市登云路 425 号杭州利尔达科技大厦 Tel:0571-88800000 Fax:0571-89908519第17页 共68页UBR00 = 0X03;UBR10 = 0X00;UMCTL0 =0X4A;UTCTL0 |= SSEL0;ME1 |= UTXE0 + URXE0;IE1|=URXIE0;P3SEL |=0X30;P3DIR |=0x70;P3OUT_BIS_SR(LPM3_bits + GIE); / Enter LPM3 w/ interrupt#pragma vector=UART0RX_VECTOR_interrupt void usart0_rx

15、(void)int i;P3OUT|=BIT6;while (!(IFG1 / USART1 TX buffer ready?TXBUF0 =RXBUF0; / RXBUF1 to TXBUF1for(i=0;i #include LSD MCU TECHNOLOGY CO., LTD .利尔达单片机技术有限公司WWW.LIERDA.COM公司地址:杭州市登云路 425 号杭州利尔达科技大厦 Tel:0571-88800000 Fax:0571-89908519第20页 共68页在 msp430x14x.h 中已经对 UART0RX_VECTOR 进行审明了啊。 请问需要进行怎么修改? A16

16、:是 IAR 调试软件的问题, 在 IAR1.26 版和以下都是 interrupt UART0RX_VECTOR void UART0RX(void)的写法,以上都是#pragma vector=TIMERB0_VECTOR _interrupt void Timer_B (void)的写法。Q17:P1DIR=0x10; P1SEL=0x10;/p1.4 为 SMCLK P2DIR=0x01; P2SEL=0x01;/P2.0 为 ACLK P5DIR=0x10; P5SEL=0x10;/p5.4 为 MCLK 在设置好了时钟后, 是不是能通过上面的语句在 p1.4,p2.0,p5.4 口用示波器看到时钟信号呢?但为什么没有 看到?而用示波器观察晶振是起振的。 A17:程序没有死循环,跑到最后就复位了。原来的程序上加了语句:while(1);后当程序跑到这个空循环时, 再用示波器测各个引脚 时

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 建筑机械

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号