您好,这个问题我在K64的板子上是这样解决的:
思路1:
1.我先是把UART中的FIFO的接收设置为1,设置接收中断使能,这样在接收到数据后会产生中断信号,我在中断中用buffer数组接收数据。
2.开启一个任务,这个任务是用于检验是否总线空闲,如果是,则认为之前中断buffer接收到的数据为一个完整的数据(原理:K64自带的有一个总线空闲标志,如果有连续的数据一直在发送,则这个标志不会置位,在空闲时则会置位,读取后,要记得清理标志位。具体参见K64手册P1548,UARTx_S1中的IDLE)。
思路2:
使用片上PIT组件,设定一个定时时间,UART中断用于接收数据,在接收到第一个数据时,保存UART接收到的数据,同时UART中断内部开启PIT定时,如果在设定时间内接收到第二个数据,则在UART中断中重置定时时间,以避免PIT组件产生中断,而在PIT中断中设置接收完成标志位,开启一个任务,用于读取这个接受完成标志位和处理数据。
以上两种思路我都已经代码实例化并测试通过,你可以在K22上试试。祝好。
P.S:KSDK是越改越烂了。