Lin总线通信在STM32作为主机代码以及从机程序

您所在的位置:网站首页 汽车电脑软件校验怎么操作的 Lin总线通信在STM32作为主机代码以及从机程序

Lin总线通信在STM32作为主机代码以及从机程序

2024-07-05 14:45| 来源: 网络整理| 查看: 265

距离上次做资料准备已经过去六天了。最近在学车,上周末就没有开电脑。这周开始进行了Lin通信的代码整理,目前是可以正常通信的了,采用的是增强型校验方式。后期再进一步跟进研究。。。更新一博,留作纪念 在想一个问题。。。为什么树可以长这么高?狗可以单身这么久? 我不明白。。。

先将代码更改前的注释贴出来

/****************************************************************** Lin总线帧格式:帧头+应答 帧头:同步间隔段(至少13个显性电平)+同步间隔段间隔符(至少1位隐形电平)+同步段(0x55)+字节间间隔+PID(ID+校验位) 注:PID=ID(6位)+校验(2位) ID 取值范围为: 0x00~0x3f ID的取值分类: 信号携带帧 : 0x00~0x3b 诊断帧(主机请求):0x3c 诊断帧(从机应答):0x3d 保留帧 : 0x3e,0x3f P0 = ID0⊕ID1⊕ID2⊕ID4 异或运算 P1 = ┐(ID3⊕ID4⊕ID5⊕ID1) 异或后取非 应答:应答间隔+数据段+校验和段 注:数据段 低字节的低位先发 标准型校验和:只校验数据段 增强型校验和:校验数据段以及PID 诊断帧只能用标准型校验和 ******************************************************************/ /****************************************************************** lin中断接收函数功能: 1、回环效果:即主机发送帧头或者主机发送帧头+应答,主机的中断服务程序都会接收数据。 可以检测出:主机串口Tx、Rx、Lin脚,三个引脚上的信号是相同的(除了电平不同)。 2、当串口检测到连续至少11位显性电平即进入中断开始接收。 3、中断服务函数接收数据时按进程推进 ①接收同步段是否OK? ②接收ID校验后解析是数据执行还是反馈 若是执行: 若是反馈: ③分步接收数据 ③准备数据在帧头结束后发送数据 ④匹配校验数据是否正确 ⑤解析数据并执行 ******************************************************************/ STM32作为主机部分代码: // 主机帧头部分 void Lin_SendBreak(void) { USART_SendBreak(USART1); }

起先是同步间隔段,因为作为主机要连续发送至少13位显性电平,这里用的是STM32自带的库函数,直接调用就行。

oid Lin_SendSyncSegment(void) { USART_SendData(USART1,0x55); while(USART_GetFlagStatus(USART1,USART_FLAG_TC) != SET ); }

接着就是同步段,发送0x55

u8 Lin_CheckPID(u8 id) { u8 returnpid ; u8 P0 ; u8 P1 ; P0 = (((id)^(id>>1)^(id>>2)^(id>>4))&0x01)1)^(id>>3)^(id>>4)^(id>>5)))&0x01)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3