我是靠谱客的博主 高高故事,最近开发中收集的这篇文章主要介绍lin通信过程的理解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

*uart接收和发送消息时,都会产生中断,即产生中断信号,运行一次中断服务函数

*中断函数中根据寄存器的标志位,

首先判断是否收到头部报文,再

根据PID判断是lin传送还是lin接受

若是lin接受,则把用于接收数据的寄存器先清除,并且标出数据长度,帮助后面判断数据是否接收完成

若是lin发送,则把要写的数据放入数组,再写入传输数据的寄存器中

再判断数据是否接收满了的缓冲区标志位

如果满了则标志位为1

继续判断PID,如果PID(根据信号列表来判定需求的信号)是所要的,

则把所存储接收数据的寄存器里面的数据,读入到数组中

否则,则不作应答,再接收到头文件的时候,会重新清0寄存器。

总结:

中断函数里面所要做的就是把判断是接受还是发送,如果是接受,则清0接收寄存器,并在下一段判断PID中,把对应的数据先读入寄存器,再读入数组保存。其他的对数据的处理,则要对被保存的数组进行处理,要放在中断函数之外进行。

自己理解的整体过程,Lin一次大概传输一个报文,然后引发一次中断,一般波特率为19200,即1ms传输俩个字节,,一般信号矩阵会把传输的一个信号的信号长度标出来,一般均为八个字节,八个字节需要4ms,所以要先判断要接受的数据的数量接收完成没,这一步是自己标出数据的长度。执行一次中断,然后在中断函数中,单片机先判断报文头是否接收完成,如果接收完成判断是接收还是发送请求,然后执行相应操作,然后再判断缓冲区是否满了,满了说明指定数量的数据已经存入,这时候再把数据存入数组,写入的是二维数组(这个数组存的是字节),行为PID,列为字节位,然后根据PID的不同来设置,一般的长为8个字节,一般先确定PID,然后根据PID寻求到固定字节,从而确定所需要的信号位(这里的信号都是bit位所以要先找到对应的字节),然后再通过移位相与,判断固定的位数为多少后再进行判断固定的位数是什么,在执行相应的信号。这后面对数据的处理就要放在中断函数之外,中断函数只用来接收特定的数据,并把它们存入数组。

最后

以上就是高高故事为你收集整理的lin通信过程的理解的全部内容,希望文章能够帮你解决lin通信过程的理解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部