发新帖本帖赏金 30.00元(功能说明)我要提问
返回列表
打印
[APM32F0]

基于APM32F003 LIN通信之LIN Slave通信

[复制链接]
1755|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
糊糊糊锅|  楼主 | 2024-9-23 16:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 糊糊糊锅 于 2024-9-24 11:44 编辑

#申请开发板# #申请原创# #技术资源# 一、前言
汽车配件绕不开LIN和CAN通信本篇文章基于LIN总线的介绍以及代码实现介绍,主控芯片选择APM32F003(堪称业内最便宜车规芯片,已通过AECQ-100认证,大批量应用于倒车雷达、电子后视镜等汽车产品)。


二、LIN总线基础知识讲解
2.1 什么是LIN?
LIN是Local Interconnect Network的缩写,是基于UART/SCI(通用异步收发器/串行通信接口)的低成本串行通用协议,针对汽车分布式电子系统而定义的一种低成本的串行通讯网络,是对控制器区域网络(CAN)等其它汽车多路网络的一种补充,适用于对网络的带宽、性能或容错功能没有过高要求的应用。


2.2 LIN总线拓扑图


LIN的拓扑结构为单线总线,应用了单一主机多从机的概念。总线电平为12v,传输位速率最高位20kbps。由于物理层限制,一个LIN网络最多可以连接16个节点,典型应用一般都在12个节点以下,主机节点有且只有一个,从机节点有1~15个。
主机节点包含主机任务和从机任务,从机节点只含从机任务。
从机任务不能够主动发送数据,需要接收主机发送的帧头(帧的起始部分),根据帧头所包含的信息(这里指帧ID判断):
(1)发送应答(帧中除帧头外剩下的部分);
(2)接收应答;
(3)既不接收也不发送应答;

2.3 LIN帧结构

其中值“0”为显性电平(大约0v),        值“1”为隐形电平(大约12v),总线实行”线-与“:当总线上有大于等于一个节点发送显性电平时,总线呈现显性电平。所有节点都发送隐形电平或不发送信息(不发送任何信息时总线默认呈现隐形电平),总线才呈现隐形电平。

①帧头包括同步接隔断、同步段以及PID段,应答包括阔数据段和校验和段。
②同步间隔段是至少13位的显性电平
③同步段为0x55
④受保护ID段的前6位叫作帧ID(Frame ID),加上两个奇偶检验位后称作受保护ID

校验公式如下,其中“⊕”代表“异或”运算, “¬”代表“取非”运算。
P0 = ID0 ⊕ ID1 ⊕ ID2 ⊕ ID4
P1 = ¬ (ID1 ⊕ ID3 ⊕ ID4 ⊕ ID5)
校验和分为标准校验和及增强型校验和
标准型校验和,数据段各字节,适合于诊断帧,与LIN1.x从机节点通信
增强型校验和,数据段各字节及受保护ID,与LIN2.x从机节点通信(诊断帧除外)
采用标准型校验和还是增强型校验和由主机节点管理,发布节点和各收听节点根据帧 ID 来判断采用哪种校验和。
校验方法为将校验对象的各字节作带进位二进制加法(每当结果大于等于 256 时就减去 255),并将所得最终的和逐位取反,以该结果作为要发送的校验和。接收方根据校验和类型,对接收数据作相同的带进位二进制加法,最终的和不取反,并将该和与接收到的校验和作加法,如果结果为 0xFF,则校验和无误,这在一定程度上保证了数据传输的正确性。
(发送方需要将校验和 逐位取反 发送,接收方 不取反 校验和,接收方并将 不取反的校验和 接收到的校验和 相加,看是否为0xFF)

2.4 UART和LIN总线的区别
综上所述,UART与LIN通信存在的差别主要在于以下两点:
1.物理层需要检测到同步间隔段
2.协议层需要进行同步段发送,以及PID、校验和的计算

三、APM32F003支持LIN通信的相关寄存器说明
通过以上说明,对LIN有了大体的认知。通过LIN通信流程/格式,我们大概可以推断出LIN通信需要以下寄存器功能支持,详见用户手册USART LIN模式章节:
(1)使能LIN模式;
(2)使能LIN断开符检测中断/接收数据中断;
(3)配置LIN断开符检测长度;
(4)配置LIN通信波特率;
(5)LIN断开符检测中断/接收数据中断标志位;


四、LIN Slave数据接收状态机


五、代码实战
1.准备工作:APM32F003 demo板一套、LIN收发器模块、LIN总线分析仪
2.硬件连接:
MCU                               LIN收发器模块          LIN总线分析仪
PD5(USART_TX) ---->   RX           LIN ---->    LIN
PD6(USART_RX) ---->   TX           GND---->   GND
GND                      ---->   GND
3.实验效果
①发送39 01报文点亮LED2, 发送39 02报文点亮LED3;
②发送0x3A帧ID报文,MCU通过LIN总线回复对应报文;
③发送除以上两条帧ID的报文不作应答处理。
4.代码解析(完整工程详见附件)
①进行LIN初始化,开启接收和LBD中断,配置通信波特率,以及使能LIN模式和配置LIN断开符检测长度;

②LIN接收中断函数处理

③基于LIN Slave数据接收状态机实现的状态转换代码

④PID、校验和计算函数









使用特权

评论回复

打赏榜单

21小跑堂 打赏了 30.00 元 2024-10-10
理由:恭喜通过原创审核!期待您更多的原创作品~~

评论
21小跑堂 2024-10-10 15:30 回复TA
从LIN总线基础知识出发,介绍LIN的相关知识点,再基于APM32F003单片机进行LIN实例开发。 (ps:大佬后续再申请原创时请@21小跑堂,以便您的文章能及时审核~~) 
donk 2024-9-27 09:12 回复TA
想问一下楼主有没有lin master通信的过程,求slave和master的代码 
发新帖 本帖赏金 30.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

11

帖子

1

粉丝