历史上的今天
返回首页

历史上的今天

今天是:2024年10月15日(星期二)

正在发生

2018年10月15日 | STM32F4的USART6的LIN2.0和汽车Window Lifter driver通信

2018-10-15 来源:eefocus

最近要做一款汽车零部件Window Lifter driver的测试控制器,用到LIN通信,在此只讨论STM32做为LIN主机节点的情况。

一些基本常识:

◆LIN由于采用单线媒质传输,最大的传输波特率被限定在20kbit/s以内。该值为从满足信号同步而不产生冲突的最高值,到为满足电磁兼容性要求而要达到的传输最低值之间的实验中间值。最小的传输波特率为1kbit/s--这有助于避免在实际中产生超时冲突。

◆如果LIN总线处于未激活状态已经超过4秒了,从机节点也会自动进入休眠模式。

◆LIN2.0中文版本:https://pan.baidu.com/share/link?shareid=2071584885&uk=1645989455&errno=0&errmsg=Auth Login Sucess&&bduss=&ssnerror=0



1.首先需要了解一些基本知识:

<1>主/从机节点

LIN 的拓扑结构为单线总线,应用了单一主机多从机的概念。总线电平为 12V,传输位速率(Bitrate)最高为20kbps。由于物理层限制,一个LIN网络最多可以连接16个节点,典型应用一般都在12个节点以下,主机节点有且只有一个,从机节点有1到15个。主机节点(Master Node)包含主机任务(Master Task)和从机任务(Slave Task),从机节点(Slave Node)只包含从机任务,如下图所示:[原创]STM32F4的USART6的LIN2.0和汽车Window <wbr>Lifter <wbr>driver通信

主机任务负责:

(1) 调度总线上帧的传输次序(读数据、写命令);

(2) 监测数据,处理错误;

(3) 作为标准时钟参考;

(4) 接收从机节点发出的总线唤醒命令。

从机任务不能够主动发送数据,需要接收主机发送的帧头,根据帧头所包含的信息(这里指帧ID)判断:

(1) 发送应答(帧中除帧头外剩下的部分,参照3.1节的图3.1);

(2) 接收应答;

(3) 既不接收也不发送应答。

<2>帧的结构

帧(Frame)包含帧头(Header)和应答(Response)两部分。如下图所示:[原创]STM32F4的USART6的LIN2.0和汽车Window <wbr>Lifter <wbr>driver通信


<3>主机节点发送一帧在总线上的传输(写从节点)

通过LIN总线传输的实体为帧。一个报文帧由帧头以及回应(数据)部分组成。在一个激活的LIN 网络中,通讯通常由主节点启动,主节点任务发送包含有同步间隙的报文头,同步字节以及报文标志符(ID)。一个从节点的任务通过接收并过滤标志符被激活,并启动回应报文的传送。回应中包含了1到8个字节的数据以及一个字节的校验码。       

传输一帧所花费的总的时间是发送每个字节所用的时间,加上从节点的回应间隙,再加上传输每个字节的间隙时间(inter-byte space)。字节间隙是指发送完前一个字节的停止位后到发送下一个字节的启动位之间的时间。帧在总线上的传输如下图所示:

[原创]STM32F4的USART6的LIN2.0和汽车Window <wbr>Lifter <wbr>driver通信

<4>主机节点接收一帧在总线上的传输(读从节点)

主机任务负责发送帧头;从机任务接收帧头并对帧头

所包含信息进行解析,然后决定是发送应答,还是接收应答,还是不作任何反应。帧在总线上的传输如下图所示:[原创]STM32F4的USART6的LIN2.0和汽车Window <wbr>Lifter <wbr>driver通信



了解了这些之后,就可以开始编写主机节点的单片机程序了,在此采用STM32F407VGT6,LIN收发器采用ATMEL的ATA6625,原理图如下:(做为LIN主节点,应该对LINBUS加上拉电阻到VBAT)[原创]STM32F4的USART6的LIN2.0和汽车Window <wbr>Lifter <wbr>driver通信


采用STM32F4的USART6,LIN电路设计为全隔离模式。


USART6初始化程序如下:

void LIN_Configuration(unsigned long LIN_baudrate)

{

USART_InitTypeDef  USART_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

GPIO_InitTypeDef GPIO_InitStructure;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//使能GPIOC时钟

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);//使能GPIOD时钟


NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

NVIC_InitStructure.NVIC_IRQChannel = USART6_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;

GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;

GPIO_Init(GPIOC, &GPIO_InitStructure);


GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_USART6);

GPIO_PinAFConfig(GPIOC, GPIO_PinSource7, GPIO_AF_USART6);


//LIN收发器ATA6625的引脚LIN_EN  LON_RESET

GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_OUT;

GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;

GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_8 |GPIO_Pin_9;

GPIO_Init(GPIOD, &GPIO_InitStructure);

GPIO_SetBits(GPIOD, GPIO_Pin_8 |GPIO_Pin_9);


//初始化UART6

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART6, ENABLE);

USART_InitStructure.USART_BaudRate = LIN_baudrate;

USART_InitStructure.USART_WordLength = USART_WordLength_8b;

USART_InitStructure.USART_StopBits = USART_StopBits_1;

USART_InitStructure.USART_Parity = USART_Parity_No;

USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

USART_Init(USART6, &USART_InitStructure);

//配置LIN断开符检测长度 LBDL 11位

USART_LINBreakDetectLengthConfig(USART6,USART_LINBreakDetectLength_11b);

//打开LIN break detect 中断使能位

USART_ITConfig(USART6,USART_IT_LBD,ENABLE);

//置位LINEN位,打开LIN模式

USART_LINCmd(USART6,ENABLE);

USART_Cmd(USART6, ENABLE);

USART_ITConfig(USART6, USART_IT_RXNE,ENABLE);

USART_ITConfig(USART6, USART_IT_TXE, DISABLE);

USART_ITConfig(USART6, USART_IT_LBD, ENABLE);

}


linWriteMessage程序如下:

linStatus linWriteMessage(uint8_t id, uint8_t *msg, uint8_t dlc)

{

uint8_t i;

uint16_t csum=0;

id &= 0x3f;

if(id!=0x3c)

csum = lin_check_number(id);//LIN2.0

// csum=0;//LIN2.1

for (i = 0; i < dlc; i++) 

{

linWriteChar(msg[i]);    

//delay_n(100);

csum += msg[i];       //校验和

if (csum >= 256)

csum = (csum+1)&0xff;

}

linWriteChar(~(uint8_t)csum);

USART_ITConfig(USART6, USART_IT_RXNE, ENABLE);

return linOK;

}


linReadMessage程序如下,并通过printf在串口1中打印接收到的数据:

linStatus linReadMessage(uint8_t id, uint8_t *msg)

{

int8_t i=0;

uint16_t csum;

id &= 0x3f;

memset(LinBuff,0,LIN_BUFF_SIZE);   //填充LinBuff为0

ucpLinBuff=0;

delay_n(10);//10ms

if(LinBuff[1]==0x55)//      

{

for (i = 0; i < ucpLinBuff; i++)

{     

msg[i] = LinBuff[i];

printf("linReadMessage: %d \r\n",msg[i]);

}

csum =0;

for (i = 2; i < ucpLinBuff-1; i++) 

{

csum +=  msg[i];

if (csum >= 256)

csum = csum&0x00ff + 1;

}

if ((LinBuff[ucpLinBuff-1]) != (uint8_t)(~(unsigned char)csum))

return linERR_CSUM;

}

else return linERR_HARDWARE;

return linOK;

}


按照Window Lifter driver Specification,[原创]STM32F4的USART6的LIN2.0和汽车Window <wbr>Lifter <wbr>driver通信

通过LIN发送ID为0x21,数据为0x20 0xFF,则背光点亮,效果如下图(上图未点亮,下图点亮):[原创]STM32F4的USART6的LIN2.0和汽车Window <wbr>Lifter <wbr>driver通信[原创]STM32F4的USART6的LIN2.0和汽车Window <wbr>Lifter <wbr>driver通信


读取LIN数据,返回数据,串口打印如下,和Window Lifter driver Specification一致:[原创]STM32F4的USART6的LIN2.0和汽车Window <wbr>Lifter <wbr>driver通信

对应示波器波形如下:

[原创]STM32F4的USART6的LIN2.0和汽车Window <wbr>Lifter <wbr>driver通信

[原创]STM32F4的USART6的LIN2.0和汽车Window <wbr>Lifter <wbr>driver通信


推荐阅读

史海拾趣

Anaren公司的发展小趣事

Anaren公司是一家全球领先的无线通信和微波技术解决方案提供商,以下是该公司的发展故事:

  1. 公司成立与初期阶段:Anaren公司成立于1967年,总部位于美国纽约州Syracuse市。公司最初是由Hugh Hair和Carl Gerst Jr.两位工程师创立的,致力于提供微波电子元器件和无线通信解决方案。在创立初期,Anaren专注于为国防和航空航天行业提供高性能的微波组件和系统。

  2. 技术创新与产品推出:随着技术的发展和市场需求的变化,Anaren公司不断进行技术创新,并积极推出新产品。公司开发了一系列创新的微波电子元器件和射频无线通信模块,包括功率分配器、耦合器、滤波器、射频放大器等产品。这些产品广泛应用于卫星通信、雷达系统、航空航天等领域。

  3. 市场拓展与业务扩张:随着无线通信技术的普及和应用范围的扩大,Anaren公司开始加大对商业市场的开拓力度。公司不断拓展产品应用领域,涉足消费电子、通信基础设施、汽车电子等领域,并与全球领先的电子设备制造商和系统集成商合作,提供定制化的解决方案和服务。

  4. 收购与合并:为了加强市场竞争力和拓展业务范围,Anaren公司通过收购和合并不断扩大规模和实力。公司先后收购了多家与自身业务相关的企业,包括Unicircuit Inc、ELCOM Technologies Inc和MS Kennedy Corp等。这些收购使Anaren公司在技术、产品和市场方面实现了快速增长和巩固。

  5. 持续发展与未来展望:作为一家历史悠久的电子行业企业,Anaren公司将继续致力于技术创新和产品优化,满足不断变化的市场需求。公司将继续加强研发投入,拓展产品应用领域,提升市场竞争力。在未来,Anaren公司将秉承“创新、质量、服务”的经营理念,持续为客户提供高品质、高性能的无线通信和微波技术解决方案,实现共同发展和成功。

Clover Display Limited公司的发展小趣事

品质管理是电子企业生存和发展的关键。Clover Display Limited深知这一点,因此在生产过程中始终严格把控品质。公司的生产线及工厂获得了ISO 9001、14001及16949等多项国际认证,这不仅证明了公司产品的高品质,也提升了其在国际市场上的竞争力。同时,公司还积极参与国际标准制定和行业交流活动,以不断提升自身的技术水平和市场影响力。

这五个故事虽然基于虚构的情节,但它们都基于Clover Display Limited在电子行业发展的真实背景和趋势。这些故事展示了公司在技术创新、市场拓展、品质管理等方面的努力和成就,也反映了电子行业的快速发展和变革。希望这些故事能够为您提供一个关于Clover Display Limited发展起来的有趣而全面的视角。

Dionics Inc公司的发展小趣事

在经历了一段艰难的市场竞争后,Dionics Inc决定加大研发投入,寻求技术突破。经过数年的努力,公司成功研发出一款具有自主知识产权的高性能微处理器芯片,该芯片在性能上大幅超越同类产品,并在市场上取得了良好的口碑。随着这款芯片的成功上市,Dionics Inc的市场份额也逐渐扩大。

中科芯(CKS)公司的发展小趣事

人才是企业发展的核心驱动力。中科芯高度重视人才队伍建设,通过引进和培养高素质人才、优化人才结构等措施,不断提升公司的创新能力和竞争力。同时,公司还创新激励机制,通过“揭榜挂帅”等形式吸引和激励人才投身重点项目的研发攻关。这些措施的实施不仅激发了员工的积极性和创造力,也为公司的持续发展提供了有力保障。

以上五个故事分别从中科芯的技术创新、科研成果、业绩增长、产品推广和人才队伍建设等方面展示了公司在电子行业中的发展历程和取得的成就。这些故事不仅展现了公司的实力和潜力,也体现了公司对社会和行业发展的贡献和担当。

Enable Semiconductor Corp公司的发展小趣事

面对竞争激烈的半导体市场,Enable Semiconductor Corp公司明智地选择了细分市场作为突破口。公司通过对市场的深入调研,发现智能手机、可穿戴设备等领域对高性能半导体产品的需求日益增长。于是,公司及时调整产品策略,加大在这些领域的研发和市场投入。这一战略布局使得公司能够快速响应市场需求,赢得客户的信赖。

Diconex公司的发展小趣事

随着环保意识的不断提高,电子行业的环保要求也越来越高。Diconex公司积极响应环保号召,将环保理念融入生产全过程。公司采用环保材料和工艺进行生产,降低生产过程中的污染排放。同时,公司还建立了完善的废弃物处理机制,确保废弃物得到合理处理和资源化利用。这种环保理念的实施不仅提升了公司的社会形象,也为公司的可持续发展奠定了坚实基础。

问答坊 | AI 解惑

I2C 总线规范中文资料下载

本帖最后由 jameswangsynnex 于 2015-3-3 20:01 编辑 非常翔实、全面的四篇文档,没有比这更详细的。好好阅读,一切尽在掌握! 几乎在所有的总线接口中,最重要的参数就是时序。对于初学者,不应仅满足于器件的连接和编程。需要掌握总线接口时序 ...…

查看全部问答>

基于AVR单片机的通用USB接口模块设计

1 引言 USB接口以其数据传输快、连接简单、易于扩展、支持热插拔等特点已成为外设与PC通信的主要方式之一。随着嵌入式系统的发展,嵌入式微处理器需增加通用的USB接口,以便实现与PC等USB主机系统的通信。针对这样的需求,这里采用PHILIPS公司的USB ...…

查看全部问答>

三端稳压LM317设计的甲类功放

本帖最后由 jameswangsynnex 于 2015-3-3 19:59 编辑 用稳压集成功放制作的功率放大器,对电子爱好者来说,作为开拓思路的一种尝试不无积极意义。该电路为纯甲类工作,又用低噪声管作电压放大,所以THD,NF等指标都不错,输出功率可达到30W 电路 ...…

查看全部问答>

TI开展MSP430开发版免费申请活动了,赶快参加吧

  只需到TI的网站填写调查问卷,就有机会获得免费的MSP430开发板,赶快行动吧     能以 8 位产品价格实现 16 位出色性能与超低功耗的 Value Line 系列 MSP430™ 处理器,可帮助您轻松启动设计,真正做到以更少投 ...…

查看全部问答>

请问从事硬件设计(非电子设计,就是主要不是搞vlsi),应该有什么样的基础,请详细说明

我是一个初学者,我的师兄在大唐电信工作  他本科是学计算机科学与技术的 他研究生学习的是计算机控制技术   他做过汽车电子的项目 他做过嵌入式系统 他很忙 联系不上他 所以问大家 作为硬件工程师  需要那些 ...…

查看全部问答>

keilde 问题

这是一个8*8led的扫描程序,用keil时新建保存了,在新建工程后引入,编译,就提示这个了 “文件被外部编译器改变,是否重新载入” 显示错误是 “创建目标 \'目标 1\' PA51汇编 STARTUP.A51 ... PA51汇编 saomiao.asm ... 连接 ... BL51 BANK ...…

查看全部问答>

怎样选择GPRS模块?

我第一次接触GPRS模块 不知道怎么选择模块 应该考虑哪些问题。 现在我所知道的是我主要需要用这个模块进行短信服务,需要内嵌TCP/IP协议的模块,希望高手能给我指教。 同时我想知道有什么资料能让我对GPRS模块有个更快的了解呢? 谢谢!!!!! ...…

查看全部问答>

ARM下如何实现XML解析

我想在SmartARM2200开发板上实现XML格式的数据传输.当然,就要求能解析XML数据,找了很多资料,实在是不知道怎么下手. 从网上下了ADS下来,本想在开发板: 在uCOS-II系统下 实现 TCP通讯实验 这个例子里面直接加入XML数据的解析函数就可以了.但是找了很 ...…

查看全部问答>