51uwb.cn

 找回密码
 立即注册
查看: 4673|回复: 0
打印 上一主题 下一主题

CC2530 串口输出异常之提前输出一个"点"

[复制链接]

22

主题

55

帖子

848

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
848
跳转到指定楼层
楼主
发表于 2017-12-23 20:57:34 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
在筹备CC2530 基础知识视频,拿出好早之前的串口代码,发现串口会在我希望输出的字符串前输出一个"点号",HEX 为00

我想要输出的是hello,但是实际输出的却是".hello",基础实验可以一带而过,但是需要澄清原因。

Debug 流程:
1 考虑CC2530问题和串口线问题,更换其它CC2530 底板和最小模块,使用USB 转串口模块接收数据,发现依然是有问题
2 考虑代码问题,度娘求救,找到一篇写得比较好的博文,全部粘贴复制其UART 初始化代码,发现问题依旧
3 下断点,看传入的数据和数据长度是否符合预期
  1.   int j;
  2.   for(j=0;j<len;j++)
  3.   {
  4.     U0DBUF = *Data++;
  5.     while(UTX0IF == 0);
  6.     UTX0IF = 0;
  7.   }
复制代码
发现len 和Data都没有问题,但是发现一个情况就是,在我第一次调用发送函数的时候,"点号"已经出来了,所以可以判定,点号不是我这个发送函数打出来的, 下一步就是往上回滚,看看到底哪里出了问题。
  1.   initio();
  2.   initclk();
  3.   inituart();
  4.   UartTX_Send_String("hello",5);
复制代码
main 函数代码如上,一点点回滚下断点,最后发现执行initio的时候就会打印"点号",而initio只有一行代码,代码作用是将P02 和 P03 设置为外设(因为我们的UART会用到这两个IO)
  1. void initio(void)
  2. {
  3.    P0SEL|=0x0c;
  4. }
复制代码
并不清楚为何设置这个会打印出00"点号",可能设置的时候内部引脚产生动作,但是IOpin 产生 toggle,电脑串口误采数据
  1.   initclk();
  2.   initio();
  3.   inituart();
  4.   UartTX_Send_String("hello",5);
复制代码
而,我继续实验,将initio 放到initclk 后,“点号”就消失了,这个时候CC2530 内部是32Mhz,配置P0SEL 没有产生toggle? 为何电脑没有误采集?
我觉得这个是个bug,我们以后实验的时候留意一下register的设定顺序


附参考博文:http://blog.csdn.net/Thanksgining/article/details/42291101


回复

使用道具 举报

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

本版积分规则

bphero Inc.  

GMT+8, 2024-11-22 09:53 , Processed in 0.014469 second(s), 7 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

快速回复 返回顶部 返回列表