找回密码
 立即注册
查看: 125|回复: 8

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

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2026-02-09 09:57:57
已绑定手机

2

主题

8

回帖

36

积分

新手上路

积分
36
发表于 2026-1-27 19:10:51 | 显示全部楼层 |阅读模式
lin.jpg

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

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:654
  • 最近打卡:2026-04-03 10:02:32
已绑定手机

52

主题

2546

回帖

8932

积分

论坛元老

积分
8932
发表于 2026-1-29 10:06:51 | 显示全部楼层
HDRL/HDRH和HDP用于定义软件配置完发送帧头命令,到LIN模块实际发送帧头的时间,可用于延时发送。

截图202601290958166434.jpg
截图202601291003216411.jpg

官方LIN总线例子提供了帧头延时时间设置函数:
  1. //========================================================================
  2. // 函数: void LinSetHeadDelay(u8 base_ms, u8 prescaler)
  3. // 描述: Lin总线设置帧头延时函数。
  4. // 参数: base_ms:延时计数, prescaler:延时分频.
  5. // 返回: none.
  6. // 版本: VER1.0
  7. // 日期: 2021-01-05
  8. // 备注: 延时时间(ms) = base_ms*(prescaler+1)
  9. //========================================================================
  10. void LinSetHeadDelay(u8 base_ms, u8 prescaler)
  11. {
  12.     u16 tmp;
  13.     tmp = (MAIN_Fosc * base_ms) / 1000; //注意计算结果不能超过65535,否则会溢出
  14.     LinWriteReg(HDRH,(u8)(tmp>>8));
  15.     LinWriteReg(HDRL,(u8)tmp);      //设置帧头延时计数
  16.     LinWriteReg(HDP,prescaler);     //设置帧头延时分频
  17. }
复制代码

如果调用函数时设置参数:LinSetHeadDelay(0x01,0x02);
那么延时发送时间 = 1ms * (2+1) = 3ms
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2026-02-09 09:57:57
已绑定手机

2

主题

8

回帖

36

积分

新手上路

积分
36
发表于 2026-1-29 12:15:53 | 显示全部楼层
好的,感谢!明白了,那主要作用应该是用于前后帧之间的间隔时间用。
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2026-02-09 09:57:57
已绑定手机

2

主题

8

回帖

36

积分

新手上路

积分
36
发表于 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呢?
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:654
  • 最近打卡:2026-04-03 10:02:32
已绑定手机

52

主题

2546

回帖

8932

积分

论坛元老

积分
8932
发表于 2026-2-9 09:19:36 | 显示全部楼层
diwk*** 发表于 2026-2-8 23:19
现在发现个新问题:主机用帧头延时寄存器(延时100ms)后主机无论用何种模式都无法读取到从机反馈的数据 ...

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2026-02-09 09:57:57
已绑定手机

2

主题

8

回帖

36

积分

新手上路

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

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

32G实验箱默认延时是2ms

32G实验箱默认延时是2ms
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2026-02-09 09:57:57
已绑定手机

2

主题

8

回帖

36

积分

新手上路

积分
36
发表于 2026-2-9 10:05:35 | 显示全部楼层
diwk*** 发表于 2026-2-9 09:57
32G实验箱默认延时是2ms,反正我是设定100ms就是无法读取从机反馈的数据,设定到0ms就可以了
...

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2026-02-09 09:57:57
已绑定手机

2

主题

8

回帖

36

积分

新手上路

积分
36
发表于 2026-2-9 10:11:04 | 显示全部楼层
diwk*** 发表于 2026-2-9 10:05
这个参数对应的是时钟频率11.0592M的时候是2ms

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2026-02-09 09:57:57
已绑定手机

2

主题

8

回帖

36

积分

新手上路

积分
36
发表于 2026-2-9 12:27:31 | 显示全部楼层
乘风*** 发表于 2026-2-9 09:19
这种情况我倒没有遇到过,你可以用32G实验箱例程包里面的LIN主从收发测试的例子分别烧录到两个节点进行主 ...

我用的LIN收发器是TJA1027。又通过反复测试,这个帧头延时时间设定为3ms以下貌似正常能接收从机的数据,超过3ms就不正常了
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-4-4 16:05 , Processed in 0.114826 second(s), 83 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表