把串口接收做成DMA,到串口中断接收这里该怎么写?

2019-07-15 15:15发布

想实现的功能:
1、使用定时器捕获功能,捕获外部脉冲,对其计数。2、串口波特率9600,8N1,上位机每1秒刷新一次数据(上位机发命令给单片机,5438收到命令后,返回当前数据给上位机)
现遇到的问题:
1、假设测量10秒钟,如果测量过程中,上位机软件每1秒请求一次数据,那么就会导致测得的数据比实际值小15%左右;
2、如果等测量10秒结束后,上位机软件再去请求数据,那么测得的数据就没有误差;
总结:
1、尝试提高波特率,虽然能减小误差,但是始终还是不能彻底解决问题。
问题:
1、我用timer0开了1秒定时中断,在中断中刷新数据。是不是软件流程不合理?
2、频繁进入串口中断,导致捕获过程被频繁打断,这如何破?
3、用DMA传输,目前测试了数据通过DMA直接发到串口发送缓存UCA0TXBUF,但还是存在一定误差。
我想把串口接收也做成DMA,但是不知到串口中断接收这里该怎么写了?
有没有做过相关设计的大佬,给我点建议啊。拜托拜托!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。