【Stm32】【Lin通信协议】Lin通信点亮灯实验

Lin通信点亮灯实验

通过STM32的串口发送数据,然后通过串口转换模块将数据转换成LIN(Local Interconnect Network)协议,最终控制点亮灯。需要工程和入门资料的可以私信我,看到了马上回。
入门书本推荐:

一、Lin协议 帧结构


二、代码讲解

这个结构写成代码如下:

  1. 同步间隔段(Break Field)是至少(注1)持续 13 位(以主机节点的位速率为准)的显性(低电平)电平,直接用hal库自带的HAL_LIN_SendBreak函数就行啦;
  2. 同步段(Sync Byte Field)LIN 同步以下降沿为判断标志,采用字节 0x55(转换为二进制为 01010101b);
  3. 受保护的ID,是用函数计算出来的 把从厂家那得到的设备ID,我这里是0X03,传入函数,计算得出受保护的ID;

  4. 数据段,从厂家那得到的点灯报文0x01,0x10,0xFF,0xFF,0x10,0x05,0x05,0x05(每种设备的不同);
  5. 校验和段,传入参数计算得到;

三、while函数

通过STM32的串口发送数据,然后通过串口转换模块将数据转换成LIN(Local Interconnect Network)协议,最终控制点亮灯。

四、注意点

1、Lin通信需要设置正确的波特率;

我是这么做的,在确保串口可以发送,Lin信息口有信号的(通信打通了)前提下,使用逻辑分析仪(示波器也行),测出了它接收的波特率,然后设置对应串口波特率。

利用逻辑分析仪测波特率

波特率就是每秒能发送多少个位,计算器算一下 1÷53 差不多是 0.1887,而 1s = 10^6us,乘一下18870差不多,波特率就设为19200(有误差嘛)。然后我灯就点亮了。

测一下前面的显性电平的数量

四舍五入,没错,是13个。

2、间隔段的发送前要设置 显性电平数量;

HAL_LIN_Init() 中的13 就是设置13个显性电平,我测过,没有这句,它只会产生10个,不符合要求,灯点不亮。这句是配合下面那个sendbreak 一起用的。

每天进步一点点 如果我的试错经历有帮到你,可否赏点买辣条的钱hhh(大爷 行行好 看着给点叭 意思意思 ^ .^)

相关推荐
Lugas Luo1 分钟前
SATA 协商流程深度分析 (基于 libata 与 AHCI 控制器)
linux·嵌入式硬件
charlie1145141919 分钟前
嵌入式C++教程实战之Linux下的单片机编程:从零搭建 STM32 开发工具链(3)WSL2 USB 透传,让 ST-Link 穿越虚拟化边界
c++·stm32·单片机·学习·嵌入式
项目題供诗1 小时前
STM32-简介(一)
stm32·单片机·嵌入式硬件
Darth Nihilus1 小时前
Horizon Journey 5 Evaluation and Development Kit(一)
嵌入式硬件·汽车
电子科技圈1 小时前
芯科科技驱动和重塑智能门锁行业格局多协议、安全性、AI技术与开发工具共同赋能
大数据·人工智能·嵌入式硬件·mcu·物联网·智能家居·iot
Heartache boy2 小时前
野火STM32_HAL库版课程笔记-TIM通道捕获应用之超声波测距
笔记·stm32·单片机
dqsh062 小时前
振兴中华之threadX RTOS移植到stm32用stm32cubeMX 保姆级教程
stm32·单片机·嵌入式硬件·rtos·threadx
XINVRY-FPGA2 小时前
XC7VX485T-2FFG1157I Xilinx Virtex-7 FPGA
arm开发·嵌入式硬件·fpga开发·硬件工程·fpga
GreenGoblin2 小时前
14.DSP学习记录之I2C
单片机·dsp开发·c2000
Lugas Luo3 小时前
SATA 协议报错信号与根因定位分析指南
linux·嵌入式硬件