打印
[KungFu8位 MCU]

KF8A100ENG LIN通信问题

[复制链接]
15226|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lingjun1982|  楼主 | 2021-9-18 12:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好!我正在使用的MCU是KF8A100ENG,在做LIN通信,遇到了下面几个问题。

1. 只找到了KF8A100FTN上关于LIN的Demo程序,如下,有需要的小伙伴可以去官网上下载完整版本。
这里是接收LIN报文(帧头+响应)的过程,我需要的是接收主机的帧头后,发出响应。
我的做法是在接收到帧头后,记录一个已收到的标志位,在任务中轮询这个标志位,为真时就清该标志位并发出响应。这样做时原本以100ms为周期的LIN报文,响应的周期变成了30ms。只接收报头时的周期是正确的,但是加入了响应发送,发送周期就会变短,发出的响应通过示波器看有的也不正确了。
void int_fun0() __interrupt (0)
{
        if(RC1IF)//从机的Lin接收
        {
                if(OVFER1==1)//清除溢出错误
                {
                        CRXEN1=0;       // 清溢出错误
                        _NOP();
                        _NOP();
                        CRXEN1=1;       // 重新使能接收
                }

                Lin_buf =RXSDR1;  // 清零 RXIF
//验证Lin协议帧头,并逐步接收数据到缓存中
                if((FRER1)&&(Lin_buf==0))//检测到帧错误-没有在规定的时间内检测到停止位,且接收到的数据全是0。
                {
                        flag=0;//就判断为13位低电平,为Lin间隔符
                }
                else if((flag==0)&&(Lin_buf==0x55))//紧接着的字符是时钟同步字节,0x55
                {
                        flag=1;
                        Rev_buf_cnt=0;//清零缓存指针,准备开始接收数据
                }
                else if(flag==1)//帧头解析正确,开始接收数据内容
                {
                        Rev_buf[Rev_buf_cnt++] =Lin_buf;
                        if(Rev_buf_cnt>2)//接收的数据完成,从帧头开始往后数3个数据。
                        {
                                Rev_buf_cnt=0;
                                flag=2;//接收完成标志,准备开始解析数据。
                        }
                }
        }
}
2. 我在接收中断中,接收到报头后直接发送响应,发送周期上是没有问题的,但是在一个中断中,进行持续13ms(波特率9600bps,8bytes数据)的报文发送,总觉得这样不对,而且在编译的时候,给出了下面的警告,不知道是什么意思。
警告:
!!! For Manual Push and Pop  Parameter such as STK00 ,Look over  File "manual_STK_protect.txt" which in the hex file out path !
信息:
!!! High Interrupt :  STK variable  used up to STK09  ,Should manual push and pop them if other course's  parameter  used !!!       
!!! if  right manual  push and pop them, ignore those STK info !       
!!! In         Main :  STK variable  used up to STK10  ,Should referrence this  to manual  push and pop  STK in Interrupt course!       

使用特权

评论回复
沙发
lingjun1982|  楼主 | 2021-10-11 10:14 | 只看该作者
此问题已解决,先说一下正确做法。
接收到Master发来的帧头(同步间隔段+0x55同步段+PID)后,Slave立即发送数据段的第一个字节,这个字节出去后SBC会将其再接收回来,此时又会进入接收中断,继续发数据段的下一个字节,直到发送完毕。这样在LIN总线上就会看到Master的帧头+Slave的应答这样完整的一帧报文了。
一次性发送整个数据段的方法不可取。
在SBC的原理图中可以看出,从MCU发出的数据通过TXD送到LIN上后,又通过LIN返回了RXD,从而MCU接收到此数据,所以通过示波器会在RX上看到Slave发出的数据。

使用特权

评论回复
板凳
LucasYe| | 2021-10-11 15:49 | 只看该作者
芯旺微代理,8A100ENG我们也有现货,19866620108

使用特权

评论回复
地板
guijial511| | 2021-10-11 19:13 | 只看该作者
可以参考其它例子,网上很多。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

29

帖子

1

粉丝