搜索
bottom↓
回复: 25

关于STM8的LIN模式的问题?

[复制链接]

出0入0汤圆

发表于 2016-10-7 23:42:19 | 显示全部楼层 |阅读模式
本帖最后由 we167527 于 2016-10-8 00:24 编辑

请问需要使能UART的中断功能吗?貌似STM8使能LIN功能后只要LBDIEN是“1”是不是就能就如UART的RX中断呢?进入后接受DATA后在清楚中断就好了吗?



什么是发送断开帧啊?
这里看不懂,这位寄存器起什么作用呢?
作用感觉不大吧,毕竟LBDF位没有记录break到底持续了几位?




还有LIN的从机与从机之间是如何通讯的啊?看不懂?



在响应帧头的时候读回DR里的数是怎么回事?我想启用中断和同步该怎么写呢?
请问谁有个例子和思路啊?如何辨别响应接受和响应发送并存(启用中断)
还有LIN接受不是会辨别2个DATA、4个DATA和8个DATA吗?该如何操作呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入93汤圆

发表于 2016-10-8 07:35:16 来自手机 | 显示全部楼层
请先看lin协议。
断开帧是lin的定界符,你认为是帧头就行了,它没有停止位,当做普通的字符就行了。长度啥的根本不重要。
lin采用单线半双工通信,因此可以实现从机到从机的通信,他的主从是逻辑上的,物理上实际是多主模式。

出0入0汤圆

 楼主| 发表于 2016-10-8 08:15:47 | 显示全部楼层
takashiki 发表于 2016-10-8 07:35
请先看lin协议。
断开帧是lin的定界符,你认为是帧头就行了,它没有停止位,当做普通的字符就行了。长度啥 ...

不明白从到从。协议上也只讲了主-从关系啊!从到从发出的波形应该是怎么样的。有前面的断开符吗?

出0入0汤圆

发表于 2016-10-8 08:36:45 | 显示全部楼层
刚用STM32的LIN搞完一个项目,要进入中断,有LBD中断

出0入93汤圆

发表于 2016-10-8 09:20:48 | 显示全部楼层
we167527 发表于 2016-10-8 08:15
不明白从到从。协议上也只讲了主-从关系啊!从到从发出的波形应该是怎么样的。有前面的断开符吗? ...

物理上都是主到从,无论谁发,都要先发断开符的。只是逻辑上定义为单主多从罢了。

出0入0汤圆

 楼主| 发表于 2016-10-8 10:27:03 | 显示全部楼层
大米饭 发表于 2016-10-8 08:36
刚用STM32的LIN搞完一个项目,要进入中断,有LBD中断

哦~请问有的是STM32 哪个系列啊?中断入口函数和向量多少啊?不是跟uart的RX一样的吧?

出0入0汤圆

 楼主| 发表于 2016-10-8 10:29:01 | 显示全部楼层
takashiki 发表于 2016-10-8 09:20
物理上都是主到从,无论谁发,都要先发断开符的。只是逻辑上定义为单主多从罢了。 ...

您的意思。从到从通讯。只要一个从发送断开符+分界位+0X55就可以实现从到从通讯。而不用改变从机变成主机的模式?

出0入0汤圆

发表于 2016-10-8 11:14:35 | 显示全部楼层
we167527 发表于 2016-10-8 10:27
哦~请问有的是STM32 哪个系列啊?中断入口函数和向量多少啊?不是跟uart的RX一样的吧? ...

103系列,STM32的UART貌似全部由LIN模式

出0入0汤圆

发表于 2016-10-8 11:20:04 | 显示全部楼层
we167527 发表于 2016-10-8 10:29
您的意思。从到从通讯。只要一个从发送断开符+分界位+0X55就可以实现从到从通讯。而不用改变从机变成主机 ...

LIN通信中主机有且只有一个,通信格式是固定的
13位的空白场,即Header Break
之后一个IBS间隔,然后一个同步场,即为数值0x55,Header Sync
之后一个IBS间隔,一个保护字节,即为PID,然后是数据,最后是数据校验和

先去了解下LIN通信格式,最基本的东西先搞清楚,不然就没法继续下去了

出0入0汤圆

 楼主| 发表于 2016-10-8 11:23:10 | 显示全部楼层
本帖最后由 we167527 于 2016-10-8 11:25 编辑
大米饭 发表于 2016-10-8 11:14
103系列,STM32的UART貌似全部由LIN模式


我也用过。貌似找不到LBD的中断?只有UART 的TX 和RX中断?

嗯。上图出现的从机与从机通讯是怎么回事呢?

出0入0汤圆

发表于 2016-10-8 11:52:33 | 显示全部楼层
we167527 发表于 2016-10-8 11:23
我也用过。貌似找不到LBD的中断?只有UART 的TX 和RX中断?

嗯。上图出现的从机与从机通讯是怎么回事呢 ...

USART_LINBreakDetectLengthConfig(USART1, USART_LINBreakDetectLength_11b);
USART_LINCmd(USART1, ENABLE);
USART_ITConfig(USART1, USART_IT_LBD, ENABLE);
USART_GetITStatus(USART1, USART_IT_LBD)
USART_ClearITPendingBit(USART1, USART_IT_LBD)

这些都是库函数里对LIN模式的操作
USART_ITConfig(USART1, USART_IT_LBD, ENABLE);使能LBD中断
USART_GetITStatus(USART1, USART_IT_LBD)获取LBD中断标识

出0入0汤圆

发表于 2016-10-8 11:54:09 | 显示全部楼层
大米饭 发表于 2016-10-8 11:52
USART_LINBreakDetectLengthConfig(USART1, USART_LINBreakDetectLength_11b);
USART_LINCmd(USART1, ENA ...

STM8的LIN模式比STM32要更全面,STM8里面有一些列汽车级的,LIN模式比STM32全很多

出0入0汤圆

 楼主| 发表于 2016-10-8 12:45:28 | 显示全部楼层
大米饭 发表于 2016-10-8 11:52
USART_LINBreakDetectLengthConfig(USART1, USART_LINBreakDetectLength_11b);
USART_LINCmd(USART1, ENA ...

嗯。请问当我从机的LHDIEN位为“1”也就是使能中断后,当检测到break+分界符后(LHDF=1)。中断入口是不是UART的RX中断入口呢?如:UART3_RX_IRQHandler这个吗?

出0入0汤圆

发表于 2016-10-8 13:05:08 | 显示全部楼层
srm8的LIN,ST有官方的LIB,里面按照协议已经做完了。找代理要

出0入0汤圆

发表于 2016-10-8 13:30:27 | 显示全部楼层
we167527 发表于 2016-10-8 12:45
嗯。请问当我从机的LHDIEN位为“1”也就是使能中断后,当检测到break+分界符后(LHDF=1)。中断入口是不 ...

很明显     是

出0入0汤圆

 楼主| 发表于 2016-10-8 14:53:02 | 显示全部楼层



粗略的写了下不知道是否正确?
思路是:
当接收到break+55+DATA+CRC后,把接收到的数据放在LinData数组里。
如果接收到的是帧头,接发送4个字节+CRC的反馈信号!

不知道这样写是不是正确的???
请各位指点!



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2016-10-8 15:01:34 | 显示全部楼层
we167527 发表于 2016-10-8 14:53
粗略的写了下不知道是否正确?
思路是:
当接收到break+55+DATA+CRC后,把接收到的数据放在LinData数组 ...

真够迷糊的
先检测到LBD中断才开始接收数据
否则你直接接收,开始是13bit的0,你直接接收回来的数据将全部是错误的

出0入0汤圆

 楼主| 发表于 2016-10-8 15:15:59 | 显示全部楼层
大米饭 发表于 2016-10-8 15:01
真够迷糊的
先检测到LBD中断才开始接收数据
否则你直接接收,开始是13bit的0,你直接接收回来的数据将全 ...


不是自动会检测吗?我开启了LHDIEN。只要总线上有break。不是就能跳入中断了吗?为什么还要读取遍“LHDF”位呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2016-10-8 15:16:30 | 显示全部楼层
brightchl 发表于 2016-10-8 13:05
srm8的LIN,ST有官方的LIB,里面按照协议已经做完了。找代理要

代理有点坑!

出0入0汤圆

发表于 2016-10-8 15:26:34 | 显示全部楼层
we167527 发表于 2016-10-8 15:15
不是自动会检测吗?我开启了LHDIEN。只要总线上有break。不是就能跳入中断了吗?为什么还要读取遍“LHDF ...

检测到空白场是跳入到LBD中断,不是接收中断

void USART1_IRQHandler(void)
{
       if(USART_GetITStatus(USART1, USART_IT_LBD) != RESET)
         {
               USART_ClearITPendingBit(USART1, USART_IT_LBD);/*清除LIN间隔场检测标志*/
               AnalysePlus4 = SYNCH;/*确认检测到间隔场下一个开始接收的是同步场数据*/
         }
          
       if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
         {
            USART_ClearITPendingBit(USART1, USART_IT_RXNE);/*清除接收中断标志*/
            LIN_Rx_Analyse((u8)USART_ReceiveData(USART1));//开始接收同步场和数据                  
         }
      /*溢出-如果发生溢出需要先读SR,再读DR寄存器则可清除不断入*/
       if(USART_GetFlagStatus(USART1, USART_FLAG_ORE)==SET)
         {          
            USART_ClearFlag(USART1, USART_FLAG_ORE); /*读SR其实就是清除标志*/
            USART_ReceiveData(USART1);/*读DR*/
                                                AnalysePlus4 = IDLE;
         }
}


这个用STM32做的,STM8类似,看完这个还弄不明白我就没法了

出0入0汤圆

 楼主| 发表于 2016-10-8 16:02:26 | 显示全部楼层
大米饭 发表于 2016-10-8 15:26
检测到空白场是跳入到LBD中断,不是接收中断

void USART1_IRQHandler(void)

懂了。先清除Break的中断。在接收RX数据。最后清除RX中断!

出0入0汤圆

 楼主| 发表于 2016-10-10 22:25:04 | 显示全部楼层
本帖最后由 we167527 于 2016-10-11 11:11 编辑
大米饭 发表于 2016-10-8 15:26
检测到空白场是跳入到LBD中断,不是接收中断

void USART1_IRQHandler(void)


我想问下。USART_ReceiveData只能读取8位。为什么我连续读都是同一个数。而且都是ID???有时候输出打印的是CRC和DATA的某一位?这是为什么呢?

出0入0汤圆

 楼主| 发表于 2016-10-11 11:36:28 | 显示全部楼层
大米饭 发表于 2016-10-8 11:54
STM8的LIN模式比STM32要更全面,STM8里面有一些列汽车级的,LIN模式比STM32全很多 ...

方便贴张LIN_Rx_Analyse函数的代码吗?

出0入0汤圆

发表于 2016-10-17 16:21:58 | 显示全部楼层
大米饭 发表于 2016-10-8 15:26
检测到空白场是跳入到LBD中断,不是接收中断

void USART1_IRQHandler(void)

你好,我用的STM32F103RD串口3做的测试。
    能收到LBD中断,同时也收到了USART_IT_RXNE中断,把USART_IT_RXNE中断接收数据打印出来,是0x00.
感觉同步间隔断13位显性电平误以为0x00,不知道你是否也有这样的情况。多谢

出0入0汤圆

发表于 2016-10-17 17:26:35 | 显示全部楼层
52HLX 发表于 2016-10-17 16:21
你好,我用的STM32F103RD串口3做的测试。
    能收到LBD中断,同时也收到了USART_IT_RXNE中断,把USART_I ...

同步间隔要是检测成00,后面不可能都是00
逻辑分析仪或者示波器看下主机发过来的数据

出0入0汤圆

发表于 2023-9-12 11:37:13 | 显示全部楼层
有人能搞IBS吗?联系加V 15365556780
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-5 11:19

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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