[学习笔记] 7801的软件LIN master模式简化程序

[复制链接]
2016|14
 楼主| RunningX 发表于 2020-11-12 11:40 | 显示全部楼层 |阅读模式
7801芯片没有硬件LIN外设,但是有UART0跟UART1可以配置成LIN模式。相对于硬件LIN来说,软件LIN的处理会稍多一些,需要根据LIN帧格式来拆分发送,这里做了一个简化版的LIN主机程序,方便用户理解并使用
首先看主函数,这里做了一个软件LIN的初始化配置,波特率为19200,然后主循环里面执行每100ms发送一次LIN数据
LIN发送1.png
再看发送LIN数据这里,首先发送break域,然后按帧格式顺序填充同步域0x55,校验ID:0x50,8个数据,校验和;然后通过串口通信发出去。(这里的数据位可以自定义,因为是全局变量,也可以放在外面自己定义变化的数据)
LIN发送2.png
附上波形:
LIN发送3.jpg

工程如下:
UART_LIN_MASTER.rar (777.83 KB, 下载次数: 33)




chenjun89 发表于 2020-11-16 08:10 来自手机 | 显示全部楼层
学习了,感谢楼主分享。
chenlei1910 发表于 2020-11-16 21:40 | 显示全部楼层
学习一下,有没有从机接收的程序
数据采集存储 发表于 2020-11-17 15:31 | 显示全部楼层
这个学习了,确实学习了,不错的帖子,分享出来很棒。
维修超人 发表于 2020-12-4 17:09 | 显示全部楼层
lin简单的解释,作为主机,其实就是uart的基础加上break域(最少13位的低电平+1位的高电平),break域由主机控制,我的理解break域就是用来清场子的,连续的低电平让从机们无法在总线上发数据,转为接收(大佬要开始说话了的意思)。然后是同步场0x55就更好理解了,就是8位连续变化的高低电平,用来同步时钟即波特率。然后是ID。
作为从机,简单的做法就是普通uart就可以了,一直监听串口数据,主机发送的break域、同步域和ID,对uart来说就是0x00 + 0x55+ID。当判断此时ID是自己从机的ID,则把从机要告诉主机的数据发送上去即可。
这是简单的做法,正确的做法应该是要break域监测的,这个STM32的串口支持
weifeng90 发表于 2020-12-6 21:15 | 显示全部楼层
不错,感谢楼主分享。
guijial511 发表于 2020-12-7 08:02 来自手机 | 显示全部楼层
LIN没有用到过。
huquanz711 发表于 2020-12-7 22:49 来自手机 | 显示全部楼层
感谢楼主分享经验
天意无罪 发表于 2020-12-8 08:15 | 显示全部楼层
LIN总线能跑多大的通信速率?
liangshuang95 发表于 2020-12-10 08:00 来自手机 | 显示全部楼层
LIN总线貌似汽车上面用的多
liangshuang95 发表于 2020-12-10 08:01 来自手机 | 显示全部楼层
LIN总线貌似汽车上面用的多
嵌入小菜菜 发表于 2020-12-17 20:34 | 显示全部楼层
感谢楼主分享,感谢,不错的,不错的。

2334566436 发表于 2020-12-18 14:29 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

223

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部