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