LIN模块这三个寄存器HDRL/HDRH和HDP怎么使用
LIN模块这三个寄存器HDRL/HDRH和HDP怎么使用?具体能实现什么功能?
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
好的,感谢!明白了,那主要作用应该是用于前后帧之间的间隔时间用。 乘风飞扬 发表于 2026-1-29 10:06
HDRL/HDRH和HDP用于定义软件配置完发送帧头命令,到LIN模块实际发送帧头的时间,可用于延时发送。
现在发现个新问题:主机用帧头延时寄存器(延时100ms)后主机无论用何种模式都无法读取到从机反馈的数据了,示波器接上去看了主机读从机反馈数据的时机都是不对的,主机发送0x3d帧头后还没等从机反馈数据,立马就能查询到LSR的RDY=1,就允许读从机反馈的数据,这里逻辑上就错误了,哪怕用软延时等从机反馈数据完毕后再等待个5ms也是无法读取到从机反馈的数据,读到的是上一次主机发送给从机的数据。这个问题一直困扰我两三天时间在查找。后来把主机的帧头延时寄存器设定为0ms后,主机用软延时100ms(相当于帧间隔100ms左右)就能正常的读取到从机反馈的数据了。这算不算是芯片的一个小bug呢? diwkbatp 发表于 2026-2-8 23:19
现在发现个新问题:主机用帧头延时寄存器(延时100ms)后主机无论用何种模式都无法读取到从机反馈的数据 ...
这种情况我倒没有遇到过,你可以用32G实验箱例程包里面的LIN主从收发测试的例子分别烧录到两个节点进行主从验证,例子主机默认设置帧头延时200ms 乘风飞扬 发表于 2026-2-9 09:19
这种情况我倒没有遇到过,你可以用32G实验箱例程包里面的LIN主从收发测试的例子分别烧录到两个节点进行主 ...
32G实验箱默认延时是2ms,反正我是设定100ms就是无法读取从机反馈的数据,设定到0ms就可以了
diwkbatp 发表于 2026-2-9 09:57
32G实验箱默认延时是2ms,反正我是设定100ms就是无法读取从机反馈的数据,设定到0ms就可以了
...
这个参数对应的是时钟频率11.0592M的时候是2ms diwkbatp 发表于 2026-2-9 10:05
这个参数对应的是时钟频率11.0592M的时候是2ms
对了,这个参数跟主时钟频率没关系 乘风飞扬 发表于 2026-2-9 09:19
这种情况我倒没有遇到过,你可以用32G实验箱例程包里面的LIN主从收发测试的例子分别烧录到两个节点进行主 ...
我用的LIN收发器是TJA1027。又通过反复测试,这个帧头延时时间设定为3ms以下貌似正常能接收从机的数据,超过3ms就不正常了
页:
[1]