历史上的今天

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

正在发生

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

发布者:创意火花 来源: eefocus关键字:STM32F4  USART6  通信 手机看文章 扫描二维码
随时随地手机看文章

最近要做一款汽车零部件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通信


关键字:STM32F4  USART6  通信 引用地址:STM32F4的USART6的LIN2.0和汽车Window Lifter driver通信

上一篇:STM32F4的外部SRAM_原理部分
下一篇:STM32中USART接收中断问题使单片机死机

推荐阅读

NEC的红外遥控协议The NEC protocol uses pulse distance encoding of thebits. Each pulse is a 560µs long 38kHz carrier burst (about 21 cycles). Alogical "1" takes 2.25ms to transmit, while a logical "0"is only half of that, being 1.125ms. The recommended carrier duty-cycle is 1/4or 1/3. 遥...
  工业机器人技术原理   机器人控制系统是机器人的大脑,是决定机器人功能和性能的主要因素。工业机器人控制技术的主要任务就是控制工业机器人在工作空间中的运动位置、姿态和轨迹、操作顺序及动作的时间等。具有编程简单、菜单操作、友好的人机交互界面、在线操作提示和使用方便等特点。   关键技术包括:   (2)模块化层次化的控制器软件...
1、NVH 性能开发的挑战NVH 性能开发面临的挑战众多,其中最为重要的就是成本和开发周期的挑战。 在节省成本方面,近年来汽车行业整体下行,竞争日益激烈,对整车开发成本的控制也日益严格;随着每个零部件成本目标的严格控制,NVH 设计方案要求越来越精准。消除 NVH 后期整改造成的模具重新开发、工艺装备重新排布等浪费问题对节省 NVH 开发成本具...
近日,国内知名AI芯片公司探境科技发布了音旋风系列的第二代产品,共包括VOI311(轻量版)、VOI621(升级版)和VOI721(增强版)三款芯片。主要应用在联网生态、智能音箱和云端AI等领域方向。随着信息技术的不断发展,人们生活水平的提高,智能家电设备进入到千家万户。语音识别技术日渐成熟,越来越多的智能家电设备都引入语音识别技术。现有技术通常利用...

史海拾趣

问答坊 | AI 解惑

一个老总对新人的建议

1.一定要有独立的人格、独立的思想。一个经过独立思考而坚持错误观点的人比一个不假思索而接受正确观点的人更值得肯定。不要成为灌输教育的牺牲品。 2.在进行职业生涯规划的时候,不妨以此作为思考的出发点。根据不同的职业生涯规划来塑造各自 ...…

查看全部问答∨

天哪,不能再甜言蜜语了~~

全球80%手机或遭窃听?看到这,一下子懵了~~这还有啥隐私啊? 据报道,德国加密专家、曾获美国弗吉尼亚大学计算器工程学博士学位的诺尔宣布,自己有意破解已有21年历史的GSM算法,目的是为了帮助发现GSM的安全漏洞。 今年初,他发现固定无线电话 ...…

查看全部问答∨

男人三十岁前不要在乎的18件事

1、放弃 把握的反面就是放弃,选择了一个机会,就等于放弃了其它所有的可能。当新的机会摆在面前的时候,敢于放弃已经获得的一切,这不是功亏一篑,这不是半途而 废,这是为了谋求更大的发展空间;或者什么都不为,只因为喜欢这样做,因为,年轻就 ...…

查看全部问答∨

【100】WM5的软件在WM6 下屏幕大小不匹配

在WM5 SDK中写的普通的对话框程序   放到多普达的WM6机器上 只能显示大半个对话框 以前有台华硕p565的也是WM6,也出现了这个问题,后来校正了一下屏幕就ok了 多普达这个用这个方法还是不行    不知大家谁遇到过这个问题  ...…

查看全部问答∨

可充电的LI电应急照明系统

可充电的LI电应急照明系统…

查看全部问答∨

大家都来看看PCB软件

讨论下你在公司或者平时自己画板使用PCB软件!~我个人以前用过Altiumdesigner ,现在正在学习Eagle…

查看全部问答∨

STM32如果串口发送数据的时候,接收也来了数据,怎么办

例如使用TC发送后中断,和RXNE接收中断。 如果正在发送数据,处于串口中断中,这时接收也来了一串数据,这种情况怎么处理?是不是就不能及时响应接收了呢?…

查看全部问答∨

买了TI 的无线手表开发工具不会用,来看看中文版数据手册!

无线手表开发工具 eZ430-Chronos™ 开发工具用户指南 (Rev. D) eZ430-Chronos 是运动手表中基于 CC430 的高度集成的无线开发系统。它可用作手表系统的参考平台、个人局域网的个人显示器或远程数据收集的无线传感器节点。 无线手表开发 ...…

查看全部问答∨

DSP进阶

学习TI的各种DSP,本着循序渐进的原则,可以分为多个层次。根据我多年开发DSP的经验,在这里总结一下各个层次的进阶: 1、DSP2000(除了2812):进阶:标准C -> C和汇编混合编程说明:把DSP2000当作单片机来玩就可以了,非常简单。 2、DSP5000( ...…

查看全部问答∨

浅析MOSFET驱动注意事项

在低电压(100V以下)驱动应用中,多使用MOSFET作为功率转换器件。随着电压的提高,MOSFET的优势也随着不明显,所以在高压的应用场合,多使用IGBT作为功能器件,该类器件的耐压可以做得较高,结合了FET和三极管的优点,它的导通电阻和开关速度不比M ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved