This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

F28335在定时器0中使用串口连续发数据,同时计算机连续发送数据给F28335接收,一段时间后DSP无法接收计算机数据

定时器0  定时500ms。

串口B设置中断接收和发送 波特率115200 普通中断模式未采用FIFO模式

采用FIFO模式后现象还是同样的。

在F28335的定时器0的使用串口发送数据计算机接收。

计算机每10ms给F28335发送12个字节数据

F28335接收到一组数据LED闪烁。

开机工作,F28335红灯闪烁,几十秒后数据红灯不闪烁。28335无法进入串口接收中断。

串口助手显示28335串口发送数据正常。

想请教下有没有大神知道什么原因,怎么解决。

  • 这种问题需要DEBUG,查看各个寄存器的状态,寻找线索

  • 检查一下相关的接收中断位,接收使能位,接收寄存器的空闲位等等的设置。还有定时器每一次都得初如化。

  • 调串口就是比较麻烦,先检查波特率匹配吧,别太高奥

  • 你下个参考实例看看?对比查看寄存器配置是否正确,检查一下波特率,有可能是中断设置出现问题的。

  • 根据你的描述,程序一开始28335是可以接收到数据的,然后过一会就无法进入接受中断函数了,是这样吗?

    如果是,那么可能有这么几个原因:

    1. 在程序的某个子函数中不经意的更改了串口配置函数
    2. 同时发数据和接收数据,用一个定时器和串口,没有进行防止冲突的仲裁
    希望对你有帮助
  • 1.可能是中断优先级或者嵌套问题,中断标志没有及时清状态。

    2. 建议先不用定时器,只用中断接收数据,然后回传数据给电脑。

    3. 电脑用的虚拟的串口吗?建议使用质量好的USB转串口。

     

  • 应该是你定时器T0和串口接收中断优先级有冲突,可能导致无法进入接收中断里。

    刚开始能通信,应该配置没多大问题。不行你用示波器看看串口发送出来的数据是否正确及DEBUG调试看程序是否一直能进中断。

  • 接收中断的数据处理是怎样的?是不是占用了太多的时间?串口中断的处理函数应该越短越好。

  • 可能是波特率不一致。虽然你设置的是115200,但是实际的波特率并不一定是,需要使用主频、分频系数等进行计算,或者用示波器测量也行。加入28335波特率实际为115100,那么与电脑的波特率有一定误差,不断累积的话时间长了就会出错。需要确认。

  • 串口助手显示28335串口发送数据正常的意思是几十秒后28335不能接收数据了,但是还有数据发出来?

    会不会是发送与接收两个中断撞车了啊,你先试试 不发送,一直接收看看,有没有问题。一步一步来才能找到问题的。

  • 检查一下相关的接收中断位,接收使能位,接收寄存器的空闲位等等的设置。还有定时器每一次都得初如化。

  • 检查一下相关的接收中断位,接收使能位,接收寄存器的空闲位等等的设置。还有定时器每一次都得初如化。

  • 串口速度有些慢,最好换别的方式

  • 应该是跟时间有关系,查看一下串口的寄存器配置

  • 1.电脑发送的频率降低,100ms一次。看看是否会正常。

    2.进一步确认。不正常时,是怎样的状态。可以在程序的主循环中。加一个动作。操控一个IO口,周期性翻转电平,看看,出问题,时,是否还有电平翻转。

    3.如果出问题时,主循环依然能执行。确定,是否进入了中断函数。通过设置一些标识位,辅助判断。寻找哪里执行不正确

    4.如果出问题时,主循环不循环了。那可能是发生了一些异常之类的。要把所有高级的异常都使能。中断都打开。进入任何一个中断。都执行一些内容。看看到底发生了哪个异常。是不是串口中断发生了情况,触发了高级异常。再检查中断哪里发生错误。

  • 你接收到的数据存到哪,有没有可能溢出,串口接收缓冲区有没有及时读取,还有接收中断中有没有清中断标志不然下次无法响应,并且中断程序中不能延时时间太长,之前遇到过。发送程序可以吗,发送故障也会导致整个串口无法工作,也就不能接收。

  • 检查程序是否有错

  • 此问题,应该为程序错误的问题

  • 你好,我也遇到了同样的问题,你最后怎么解决的,请赐教!!