51uwb.cn
标题:
CC2530 串口输出异常之提前输出一个"点"
[打印本页]
作者:
admin
时间:
2017-12-23 20:57
标题:
CC2530 串口输出异常之提前输出一个"点"
在筹备CC2530 基础知识视频,拿出好早之前的串口代码,发现串口会在我希望输出的字符串前输出一个"点号",HEX 为00
(, 下载次数: 799)
上传
点击文件名下载附件
我想要输出的是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
欢迎光临 51uwb.cn (http://51uwb.cn/)
Powered by Discuz! X3.3