TI中文支持网
TI专业的中文技术问题搜集分享网站

关于MSP430F5438数据通过UART高速传输问题

想实现的功能:
1、使用定时器捕获功能,捕获外部脉冲,对其计数。

2、串口波特率9600,8N1,上位机每1秒刷新一次数据(上位机发命令给单片机,5438收到命令后,返回当前数据给上位机)

现遇到的问题:
1、假设测量10秒钟,如果测量过程中,上位机软件每1秒请求一次数据,那么就会导致测得的数据比实际值小15%左右;
2、如果等测量10秒结束后,上位机软件再去请求数据,那么测得的数据就没有误差;

总结:
1、尝试提高波特率,虽然能减小误差,但是始终还是不能彻底解决问题。

问题:
1、我用timer0开了1秒定时中断,在中断中刷新数据。是不是软件流程不合理?
2、频繁进入串口中断,导致捕获过程被频繁打断,这如何破?
3、用DMA传输,目前测试了数据通过DMA直接发到串口发送缓存UCA0TXBUF,但还是存在一定误差。
我想把串口接收也做成DMA,但是不知到串口中断接收这里该怎么写了?

灰小子:

肯定是程序设计不合理,测量和通讯两部分相互影响了。
具体是哪里的原因,要看代码才能知道。

Susan Yang:

等测量结束后上位机再去请求数据,这个一般都不会出问题的。而在测量过程中去请求数据,程序就很容易出问题了。请问能否给出您“假设测量10秒钟,如果测量过程中,上位机软件每1秒请求一次数据,那么就会导致测得的数据比实际值小15%左右” 这部分的代码?

user4715584:

回复 Susan Yang:

上面3张图片就是测量部分的主要部分,如果在测量过程中,上位机每1秒请求一次数据,那么数据就会比 测量完成 再去请求 得到的数据小。

下面给出串口接收部分:

一包数据接收完成

数据解析:

这就是整个流程了,我不确定是不是软件流程问题,推理了多次,感觉没问题(可能是自己没发现)。现在在尝试用DMA;至于串口模拟收发FIFO,感觉没啥用。

灰小子:

回复 user4715584:

不要在中断服务程序里放太多代码,尤其是运行时间较长的代码。

赞(0)
未经允许不得转载:TI中文支持网 » 关于MSP430F5438数据通过UART高速传输问题
分享到: 更多 (0)