diwkbatp 发表于 2026-1-27 19:10:51

LIN模块这三个寄存器HDRL/HDRH和HDP怎么使用



LIN模块这三个寄存器HDRL/HDRH和HDP怎么使用?具体能实现什么功能?

乘风飞扬 发表于 2026-1-29 10:06:51

HDRL/HDRH和HDP用于定义软件配置完发送帧头命令,到LIN模块实际发送帧头的时间,可用于延时发送。




官方LIN总线例子提供了帧头延时时间设置函数:
//========================================================================
// 函数: void LinSetHeadDelay(u8 base_ms, u8 prescaler)
// 描述: Lin总线设置帧头延时函数。
// 参数: base_ms:延时计数, prescaler:延时分频.
// 返回: none.
// 版本: VER1.0
// 日期: 2021-01-05
// 备注: 延时时间(ms) = base_ms*(prescaler+1)
//========================================================================
void LinSetHeadDelay(u8 base_ms, u8 prescaler)
{
    u16 tmp;
    tmp = (MAIN_Fosc * base_ms) / 1000; //注意计算结果不能超过65535,否则会溢出
    LinWriteReg(HDRH,(u8)(tmp>>8));
    LinWriteReg(HDRL,(u8)tmp);      //设置帧头延时计数

    LinWriteReg(HDP,prescaler);   //设置帧头延时分频
}
如果调用函数时设置参数:LinSetHeadDelay(0x01,0x02);
那么延时发送时间 = 1ms * (2+1) = 3ms

diwkbatp 发表于 2026-1-29 12:15:53

好的,感谢!明白了,那主要作用应该是用于前后帧之间的间隔时间用。

diwkbatp 发表于 2026-2-8 23:19:47

乘风飞扬 发表于 2026-1-29 10:06
HDRL/HDRH和HDP用于定义软件配置完发送帧头命令,到LIN模块实际发送帧头的时间,可用于延时发送。




现在发现个新问题:主机用帧头延时寄存器(延时100ms)后主机无论用何种模式都无法读取到从机反馈的数据了,示波器接上去看了主机读从机反馈数据的时机都是不对的,主机发送0x3d帧头后还没等从机反馈数据,立马就能查询到LSR的RDY=1,就允许读从机反馈的数据,这里逻辑上就错误了,哪怕用软延时等从机反馈数据完毕后再等待个5ms也是无法读取到从机反馈的数据,读到的是上一次主机发送给从机的数据。这个问题一直困扰我两三天时间在查找。后来把主机的帧头延时寄存器设定为0ms后,主机用软延时100ms(相当于帧间隔100ms左右)就能正常的读取到从机反馈的数据了。这算不算是芯片的一个小bug呢?

乘风飞扬 发表于 2026-2-9 09:19:36

diwkbatp 发表于 2026-2-8 23:19
现在发现个新问题:主机用帧头延时寄存器(延时100ms)后主机无论用何种模式都无法读取到从机反馈的数据 ...

这种情况我倒没有遇到过,你可以用32G实验箱例程包里面的LIN主从收发测试的例子分别烧录到两个节点进行主从验证,例子主机默认设置帧头延时200ms

diwkbatp 发表于 2026-2-9 09:57:57

乘风飞扬 发表于 2026-2-9 09:19
这种情况我倒没有遇到过,你可以用32G实验箱例程包里面的LIN主从收发测试的例子分别烧录到两个节点进行主 ...

32G实验箱默认延时是2ms,反正我是设定100ms就是无法读取从机反馈的数据,设定到0ms就可以了

diwkbatp 发表于 2026-2-9 10:05:35

diwkbatp 发表于 2026-2-9 09:57
32G实验箱默认延时是2ms,反正我是设定100ms就是无法读取从机反馈的数据,设定到0ms就可以了
...

这个参数对应的是时钟频率11.0592M的时候是2ms

diwkbatp 发表于 2026-2-9 10:11:04

diwkbatp 发表于 2026-2-9 10:05
这个参数对应的是时钟频率11.0592M的时候是2ms

对了,这个参数跟主时钟频率没关系

diwkbatp 发表于 2026-2-9 12:27:31

乘风飞扬 发表于 2026-2-9 09:19
这种情况我倒没有遇到过,你可以用32G实验箱例程包里面的LIN主从收发测试的例子分别烧录到两个节点进行主 ...

我用的LIN收发器是TJA1027。又通过反复测试,这个帧头延时时间设定为3ms以下貌似正常能接收从机的数据,超过3ms就不正常了
页: [1]
查看完整版本: LIN模块这三个寄存器HDRL/HDRH和HDP怎么使用