51uwb.cn

标题: CC2530 串口输出异常之提前输出一个"点" [打印本页]

作者: admin    时间: 2017-12-23 20:57
标题: CC2530 串口输出异常之提前输出一个"点"
在筹备CC2530 基础知识视频,拿出好早之前的串口代码,发现串口会在我希望输出的字符串前输出一个"点号",HEX 为00
(, 下载次数: 799)
我想要输出的是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







欢迎光临 51uwb.cn (http://51uwb.cn/) Powered by Discuz! X3.3