0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在MM32F013x上实现LIN通信的功能应用

电子设计 来源:电子设计 作者:电子设计 2022-02-18 11:10 次阅读

随着汽车电子技术的高速发展和广泛应用,实现智能化和网络化是汽车发展的必然趋势。为简化日益增加的汽车电控设备的线路连接,提升系统的可靠性和故障诊断水平,实现各电控设备之间的数据资源共享,并建成开发的标准化、模块化结构,汽车网络总线技术得到了很大发展。目前,已经开发出多种总线,如控制器局域网总线CAN、车内网络总线LIN、高速容错网络总线FlexRay、面向媒体的系统传输总线MOST、更高带宽和传输速率的车载以太网Ethernet等,这里给大家介绍在MM32F013x上实现LIN通信的功能应用。

Part.1 什么是LIN

LIN 是 Local Interconnect Network 的缩写,是基于 UART/SCI(Universal Asynchronous Receiver-Transmitter /Serial Communication Interface,通用异步收发器/串行通信接口)的低成本串行通信协议,可用于汽车、家电、办公设备等多种领域。本文主要针对在MM32F013x上实现LIN在分布式的汽车电子网络系统中的应用。

LIN总线特点

低成本:几乎车规级微控制器都具备LIN 通信必需的硬件

极少的信号线即可实现国际标准ISO9141 规定

传输速率最高可达20Kbit/s

单主控器/多从设备模式无需仲裁机制

从节点不需晶振或陶瓷震荡器就能实现自同步,节省了从设备的硬件成本

保证信号传输的延迟时间

不需要改变LIN 从节点的硬件和软件就可以在网络上增加节点

通常一个LIN 网络上节点数目小于12 个共有64 个标志符

pIYBAGAH4T6AIMvVAAH8W0hFEqY244.png

Part.2 LIN总线 帧结构

帧(Frame)包含帧头(Header)和应答(Response)两部分。

帧头包括同步间隔段、同步段以及PID(Protected Identifier,受保护ID)段,应答包括数据段和校验和段。

如图所示,其中值“0”为显性电平(Dominant),值“1”为隐性电平(Recessive),总线上实行“线-与”:当总线上有大于等于一个节点发送显性电平时,总线呈显性电平;所有的节点都发送隐性电平或不发送信息(不发送任何信息时总线默认呈隐性电平)时,总线才呈现隐性电平,即显性电平起主导作用。

o4YBAGAH4X2AFoJJAAEDI4zjnIo344.png

Part.3 程序配置

01、初始化MM32F013x UART1串口

从官网下载MM32F013x例程,参考MM32F0133C7P的UART例程的初始化以及中断服务函数,这里不在赘述。

02、LIN的发送

2.1 同步间隔段的发送

UART内部有Break信号的发送,通过使能LIN,即可实现LIN的间隔段,代码如下:

bool LINSendbreak(void)
{
uint16_t Tempcnt = 0;
UART2->CCR |= UART_CCR_LIN; //LIN Enable
UART2->CCR |= UART_CCR_BRK; //Send Break
while ((UART2->ISR & 0x00000080) == 0) //TXBRK_INTF
{
Tempcnt++;
if (Tempcnt > 5000)
return (false);
}
return (true);
}

2.2 数据的发送

数据的发送沿用原有的UART接口数据发送即可:

bool LINSendChar(uint8_t ch)
{
uint16_t Tempcnt = 0;

while ((UART2->CSR & UART_IT_TXIEN) == 0)//The loop is sent until it is finished
{
Tempcnt++;
if (Tempcnt > 5000)
return (false);
}
UART2->TDR = (ch & (uint16_t)0x00FF);
return (true);
}

2.3 数据包的发送

有了上面2个基础函数进行发送,现在来看下数据包的具体发送,从下图中可以看出数据包是根据保护段的定义来进行区分是发送信号帧还是诊断帧。

pIYBAGAH4cCABocJAADR99gcDG4213.png

信号帧的数据就可以做成以下的方式:

bool LINSendMsg(void)
{
uint8_t check_sum, i;
frame_send.error = 0;
if (!LINSendbreak()) //Send Break
return (false);
if (!LINSendChar(0x55)) //Send Sync Byte
return (false);
msg_send.Data[0] = LINCalcParity(msg_send.Data[0]);
for (i = 0; i < 9; i++)
{
if (!LINSendChar(msg_send.Data[i])) //Send Data
return (false);
}
check_sum = LINCalcChecksum(msg_send.Data, 1);
if (!LINSendChar(check_sum)) //Send Checksum
return (false);
frame_send.state = IDLE;
return (true);
}

而诊断帧的就是:

bool LINSendID(void)
{
if (!LINSendbreak())
return (false);
if (!LINSendChar(0x55))
return (false);
msg_send.Data[0] = LINCalcParity(msg_send.Data[0]);
if (!LINSendChar(msg_send.Data[i]))
return (false);
return (true);
}

这样就可以在等待UART中断函数里收到从机返回的数据。

2.4 从机的接受与发送

从机收数据与正常的串口一样,只需要做BRK信号的处理即可,从机收到数据以后按正常的返回数据,返回数据就不需要发送BRK信号。

if (LIN_RxBuff[1] == LIN_PID_60_0x3C)
{
msg_send1.Data[0] = 0x3C;
msg_send1.Data[0] = LINCalcParity(msg_send1.Data[0]);
UART2->ICR |= UART_ICR_RXIDLE; //clear idle int bit
UART2->IER |= UART_IER_RXIDLE; //enable uart rx idle int
for (i = 1; i < 9; i++)
{
if (!LINSendChar(msg_send1.Data[i]))
return (false);
}
check_sum = LINCalcChecksum(msg_send1.Data, 1);
if (!LINSendChar(check_sum))
return (false);
}

Part.4 MM32F013x LIN通信功能演示

通过逻辑分析仪可以看到信号帧的数据:

而诊断帧数据就有从机回应的数据:

有这个演示作为基础就可以开发LIN的通讯产品了。

转自:灵动MM32MCU
审核编辑:何安

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 灵动微电子
    +关注

    关注

    7

    文章

    121

    浏览量

    19640
  • LIN通信
    +关注

    关注

    2

    文章

    8

    浏览量

    3791
收藏 人收藏

    评论

    相关推荐

    TMS320F2838x和TMS320F28P65x之间进行迁移

    电子发烧友网站提供《TMS320F2838x和TMS320F28P65x之间进行迁移.pdf》资料免费下载
    发表于 10-31 09:58 0次下载
    <b class='flag-5'>在</b>TMS320<b class='flag-5'>F2838x</b>和TMS320<b class='flag-5'>F28P65x</b>之间进行迁移

    TMS320F2837x和TMS320F28P65x之间进行迁移

    电子发烧友网站提供《TMS320F2837x和TMS320F28P65x之间进行迁移.pdf》资料免费下载
    发表于 10-30 09:54 3次下载
    <b class='flag-5'>在</b>TMS320<b class='flag-5'>F2837x</b>和TMS320<b class='flag-5'>F28P65x</b>之间进行迁移

    TMS320C62x实现的扩展精度基数-4快速傅里叶变换

    电子发烧友网站提供《TMS320C62x实现的扩展精度基数-4快速傅里叶变换.pdf》资料免费下载
    发表于 10-28 10:03 0次下载
    <b class='flag-5'>在</b>TMS320C62<b class='flag-5'>x</b><b class='flag-5'>上</b><b class='flag-5'>实现</b>的扩展精度基数-4快速傅里叶变换

    TMS320DM643x DMSoC实现DDR2 PCB布局

    电子发烧友网站提供《TMS320DM643x DMSoC实现DDR2 PCB布局.pdf》资料免费下载
    发表于 10-16 11:46 0次下载
    <b class='flag-5'>在</b>TMS320DM643<b class='flag-5'>x</b> DMSoC<b class='flag-5'>上</b><b class='flag-5'>实现</b>DDR2 PCB布局

    TMS320DM644x DMSoC实现DDR2 PCB布局

    电子发烧友网站提供《TMS320DM644x DMSoC实现DDR2 PCB布局.pdf》资料免费下载
    发表于 10-16 10:43 0次下载
    <b class='flag-5'>在</b>TMS320DM644<b class='flag-5'>x</b> DMSoC<b class='flag-5'>上</b><b class='flag-5'>实现</b>DDR2 PCB布局

    利用VLIBTMS320C64x/64x+实现Canny边缘检测

    电子发烧友网站提供《利用VLIBTMS320C64x/64x+实现Canny边缘检测.pdf》资料免费下载
    发表于 10-14 11:13 0次下载
    利用VLIB<b class='flag-5'>在</b>TMS320C64<b class='flag-5'>x</b>/64<b class='flag-5'>x</b>+<b class='flag-5'>上</b><b class='flag-5'>实现</b>Canny边缘检测

    LIN接口静电放电防护方案

    是现有汽车网络(比如CAN总线通讯)提供辅助功能不需要CAN总线的宽带和多功能的场合下,使用LIN总线能够大大地节约成本。常用于连接车辆中的各种控制单元,如传感器、执行器和其他电子
    的头像 发表于 09-19 17:04 432次阅读
    <b class='flag-5'>LIN</b>接口静电放电防护方案

    AM62x器件实现最小平台开发

    电子发烧友网站提供《AM62x器件实现最小平台开发.pdf》资料免费下载
    发表于 08-29 14:41 1次下载
    <b class='flag-5'>在</b>AM62<b class='flag-5'>x</b>器件<b class='flag-5'>上</b><b class='flag-5'>实现</b>最小平台开发

    微型化晶振技术:实现1.2mm x 1.0mm尺寸的关键与优势

    随着现代电子设备的不断小型化和高性能化,晶振(晶体振荡器)也面临着向更小尺寸发展的需求。1.2mm x 1.0mm这种微型化晶振的实现代表了当前晶体振荡技术的前沿,它不仅在尺寸
    的头像 发表于 08-22 17:25 435次阅读
    微型化晶振技术:<b class='flag-5'>实现</b>1.2<b class='flag-5'>mm</b> <b class='flag-5'>x</b> 1.0<b class='flag-5'>mm</b>尺寸的关键与优势

    请问如何在LIN块中配置UART模式?

    模式的驱动程序。 1.我能否获得通过 LIN 块中应用 UART 模式并激活噪声检测功能实现基本 Tx 和 Rx 的示例代码? 2.如果将 UART 用作
    发表于 07-03 07:51

    如何通过电路板LIN引脚发送占空比调制PWM数据?

    我们的应用中,我们试图特定情况下通过 LIN 引脚向主控发送输出信号。 该输出信号应为占空比调制 PWM 信号,因此我们并不是要通过 LIN 协议进行
    发表于 05-23 06:20

    TSMaster 自定义 LIN 调度表编程指导

    LIN(LocalInterconnectNetwork)协议调度表是用于LIN总线通信中的消息调度的一种机制,我们收到越来越多来自不同用户希望能够通过接口实现自定义
    的头像 发表于 05-11 08:21 678次阅读
    TSMaster 自定义 <b class='flag-5'>LIN</b> 调度表编程指导

    如何用cubemx做lin通信

    怎样用cubemx做lin通信,没有找到相应的函数,只有一个init函数,如下设置后,生成了与lin有关的代码,连中断都没有。请高手指点 /* USART3 init function
    发表于 04-26 07:44

    STM32F103 HAL_LIN主机模式只要开接收就发生错误是为什么?

    STM32F103ZE,用CUBEMX生成DEMO,作为主机单独发送数据都没有问题,只要一发从机头后LIN就再也没有输出了,DEBUG看到一直中断函数里执行,又没有跳入某个错误中,
    发表于 04-16 08:27

    MM32F5270 UART实现LIN通信

    LIN(Local Interconnect Network)总线是基于UART/SCI(通用异步收发器/串行接口)的低成本串行通讯协议,其目标定位于车身网络模块节点间的低端通信
    的头像 发表于 01-04 17:35 3788次阅读
    <b class='flag-5'>MM32F</b>5270 UART<b class='flag-5'>实现</b><b class='flag-5'>LIN</b><b class='flag-5'>通信</b>