上面一篇文章基本上是解决了,不管是主机读取不完整还是CLK受干扰后,怎么让从机重新回到正轨上来的办法;上面是直接用的DMA方式传输,并且没有用到中断,这在传输不很频繁时,没啥问题,并且从机传输的数据,只需要在主程序中根据情况更改就可以;但是如果传输非常频繁,使用这种方式会出现主机收到的数据绝大数是正确的,但有时出现错误;这个估计是传输速度快,并且频繁更改数据,在数据已经更改后,但DMA传输的还是原来的数据造成;
这样随着调试,通过了2种方式解决:
第一种方式,所有配置和流程都和上一篇一样,只是在主程序中,在需要更改数据的地方,重新复位一次通信;
第二种方式,就是使用DMA的中断处理,这里就和上一篇不太一样了,首先就是DMA的传输需要改成一次,而不是循环了,在一个就是需要打开DMA发送中断,这样就可以在DMA中断里面,进行数据更改:
中断优先级设成最高即可,并且DMA的中断不需要再专门打开;
那么在中断函数中,只需要判断是否发送完成,然后更改数据:
这样就可以随时更改需要传输的数据;目前调试出了这2种,是否还有其它更简单或者高效的方式,目前就不知道了,毕竟项目时间比较紧;有更好的方式,还请大家不吝赐教;