2109|1

9

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【TI首届低功耗设计大赛】【智联时代】——串口调试我一步步来 [复制链接]

本帖最后由 zidantou 于 2014-12-23 13:56 编辑

      430FR5969很人性化的就是和G2553 LunchPad一样自带虚拟串口,不过这个最大支持的波特率比G2553 LunchPad9600要高,想必这也是TI换仿真器方案的原因之一吧。好了,闲话少说,进入正题:
      我的习惯是在调试软件之前,首先检查硬件的工作状态,首先把仿真器上的RXDTXD短接(上面用跳帽短接)再上电,然后在设备管理器中找到虚拟串口的串口号,在串口调试助手中打开串口发送任意字符串,看能否收到一样的字符串。自发自收正常后,说明调试部分硬件没问题。如图开发板串口示意图:


有了这保障,咱调试心里也就有底了,将跳帽恢复,导入TI 430Ware中的例子,大致看了下,在配置完寄存器后,在接收中断处理函数中将收到字符一个一个发出去,可奇怪的是:串口调试助手这边发了半天,怎么一个没接收到?在此,不确定代码哪有问题,是波特率不对还是配置有问题?
在这胡乱猜还不如采取实际行动证实自己的想法,即发送一个字符看看,这个比较简单,只需要给UCA0TXBUF一个字符即可:在配置完后写入如下代码:
UCA0TXBUF=’A’;
for(;;);
下载进去后,按下复位,串口调试助手竟然收到了FR5969发的字符“A”,这说明配置和波特率都是正确的。那难道是中断有问题?再次为了证实自己的想法,在中断的发送字符处设置断点,在仿真状态下点击全速运行,串口调试助手这边也设置为0.5秒发送一个字符。但程序跑了半天也没到达断点哪里,至此,初步证实了自己的想法,点击暂停,看下程序运行到哪了。





结果发现,程序一直在while(!(UCA0IFG&UCTXIFG));死循环。这个是发送完成标识符,这就纳闷了,还没发送呢,就判断是否发送完成,这不是强人所难嘛,果断将这句移到
UCA0TXBUF = UCA0RXBUF;下面,这下,终于成功了,此处没想明白TI为什么要这样处理。
         发送和接收终于正常了之后,这还不是我最终想要的,即我需要能对接收到的字符进行判断并处理(如执行相应指令等),这里为了便于处理和滤除错误信息,对字符串加了“#”截止符。不是以“#”结尾的一概不处理。
    下面分享一下调试结果及程序:


430FR5969 UART.zip (69.94 KB, 下载次数: 9)


啰嗦这么多,在分享我的调试过程时,也想表达我的调试经验:即要有条理,不确定问题在哪时,从源头开始查起。不断猜想并证明自己的判断,问题既然有,一条条顺藤摸瓜总能找得到,此时,条理清晰可避免自己少走弯路。如有不同看法,欢迎交流。

最新回复

过来看看~~~~~~~~~~~~~~~~~  详情 回复 发表于 2014-12-9 16:49
 
点赞 关注(1)

回复
举报

1119

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
过来看看~~~~~~~~~~~~~~~~~
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表