搜索

[KungFu8位 MCU] KF8A100ENG LIN通信问题

[复制链接]
11820|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 | 显示全部楼层
可以参考其它例子,网上很多。

使用特权

评论回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

本版活跃用户

优质原创写原创,赢大奖

编辑推荐

  • 1 呐咯密密 得到打赏 ¥310.00
  • 2 qbwww 得到打赏 ¥265.00
  • 3 yanzhengxin1 得到打赏 ¥200.00
  • 4 full_stack 得到打赏 ¥100.00
  • 5 laocuo1142 得到打赏 ¥55.00
  • 6 zhangjiantao 得到打赏 ¥50.00
  • 7 小叶三千 得到打赏 ¥50.00
  • 8 cjseng 得到打赏 ¥50.00
  • 9 改名了 得到打赏 ¥30.00
  • 10 HXM1593 得到打赏 ¥15.00
在线客服 快速回复 返回顶部 返回列表