[求助] msp430f249简单串口程序,却出错。。。。

zyf6095   2016-9-5 17:22 楼主
如题,利用串口的接收中断,串口助手发字节我希望返回数组内容abc,但遇到俩问题:1、发送任何内容都不能显示(已全速运行),除非按下复位键。2、按下复位键时返回的内容偶尔是我发送的!!!并不是预设的abc,求大神告知哪里的错误,谢谢 #include "msp430f249.h" char shuzu[3]="abc"; void ini_uart() { P3SEL|=BIT6+BIT7; //P3.6,P3.7设置为UART功能(串口我用的A1) UCA1CTL1 |= UCSWRST; //复位寄存器设置 UCA1CTL0 = 0x00; //关闭奇偶校验(默认奇数校验) UCA1CTL1 |= 0x40;//波特率发生器参考时钟设置为ACLK UCA1BR0 =0x03;//此行与下一行决定整数部分 UCA1BR1 =0x00;// UCA1MCTL = 0x06;//小数调制与低频(关UCOS16) UC1IE |= 0x02;//开串口接收与发送中断 UCA1CTL1 &= ~UCSWRST;//使能USCI模块 } void main( void ) { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; ini_uart(); _EINT(); while(1); } #pragma vector=USCIAB1RX_VECTOR __interrupt void uart(void) { char i; for(i=0;i<3;i++) { UCA1TXBUF =shuzu;//我的程序里是UCA1TXBUF=shuzu【i】,但网站编辑器显示不了【i】 while(!(UC1IFG&UCA1TXIFG)); } } 本帖最后由 zyf6095 于 2016-9-5 17:28 编辑

回复评论 (4)

点赞  2016-9-5 18:51
建议单步调试,看看,然后在单步调试的时候,一边对照user's guide ,一边看寄存器的值,是否和你配置的一样
点赞  2016-9-5 21:27
引用: huaiqiao 发表于 2016-9-5 21:27
建议单步调试,看看,然后在单步调试的时候,一边对照user's guide ,一边看寄存器的值,是否和你配置的一 ...

嗯,谢谢。我已经尝试调试了,发现很神奇的现象,我在for循环结束后加一条指令复位UCA1IFG,再单步运行就可以正常执行。但上来就全速运行还是不行,我以为是串口速度太低的原因,加入延时函数现象依旧。除去手动复位的指令,开启总中断后无法进入while循环。出现Target execution Stop。。。。,醉了
点赞  2016-9-5 21:53
引用: zyf6095 发表于 2016-9-5 21:53
嗯,谢谢。我已经尝试调试了,发现很神奇的现象,我在for循环结束后加一条指令复位UCA1IFG,再单步运行就 ...

你的意思是for循环结束后,清UCA1IFG标志位?这个不用吧。我看ti的例程中没有清。
这一部分,我另外一个建议是你看看ti相关你的片子的例程。
说实话,我没有仔细看你的代码。。。但是我总觉得你有哪个地方少了些什么?
还有你确定下你的ACLK到否有如你所想要的值。
其次,就是一定要确认硬件没有问题,包括接法,跳线帽什么的。
点赞  2016-9-5 23:23
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复