社区导航

 
查看: 6067|回复: 4

[求助] STM32如何将接收LIN总线数据

[复制链接]

7

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2017-5-30 16:46:45 | 显示全部楼层 |阅读模式
      各位大侠,大家端午安康!小弟最近初学LIN总线。现想将总线数据通过STM32的RX管脚进行接收,然后通过232显示在串口调试软件的窗口上。但一直未成功,可能是没有理解透LIN协议及TJA1028的用法。想请教下:
    1、STM32 通过USART_IT_LBD进入中断后,接着是如何进行接收正常USART数据的(同步场、PID、数据)?中断函数该如何写?
    2、从机接收帧头后,需要进行响应,此时,从机是连同帧头和响应数据一起发送吗?还是只发响应数据部分?
    现把程序附上,由于刚开始学,存在很多错误,请大侠们指教? 如能提供测试成功的程序,小弟不胜感激!
     //初始化部分
       USART_InitTypeDef  USART_InitStructure;
       GPIO_InitTypeDef GPIO_InitStructure;
                                  
       RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;   //TX
       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
       GPIO_Init(GPIOA, &GPIO_InitStructure);
       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;    //RX
       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
       GPIO_Init(GPIOA, &GPIO_InitStructure);

       USART_InitStructure.USART_BaudRate = 19200;
       USART_InitStructure.USART_WordLength = USART_WordLength_8b;
       USART_InitStructure.USART_StopBits = USART_StopBits_1;
       USART_InitStructure.USART_Parity = USART_Parity_No;
       USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
       USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
       USART_Init(USART1, &USART_InitStructure);
         
       USART_LINBreakDetectLengthConfig(USART1, USART_LINBreakDetectLength_11b);
       USART_LINCmd(USART1, ENABLE);      
       USART_ClearFlag(USART1,USART_FLAG_LBD);
        USART_Cmd(USART1, ENABLE);
                         
        USART_ITConfig(USART1, USART_IT_LBD, ENABLE);
        USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);


       //中断部分
        void USART1_IRQHandler(void)
{
   if(USART_GetITStatus(USART1, USART_IT_LBD) != RESET)   
  {
      USART_ClearFlag(USART1,USART_FLAG_LBD);
                               
                        while(USART_GetITStatus(USART1, USART_IT_LBD) != SET)
                        {
                                USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
                                if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
                              {              
                                  USART_ClearITPendingBit(USART1, USART_IT_RXNE);
                                    USART_SendData(USART1,USART_ReceiveData(USART1));                  
                              }
                         }
                        USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);
        }       
}

此帖出自汽车电子论坛


回复

使用道具 举报

58

TA的帖子

1

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-5-31 16:32:27 | 显示全部楼层
https://zhuanlan.zhihu.com/p/24393833 先看看这个吧,其实有LIN协议芯片的。


回复

使用道具 举报

7

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

 楼主| 发表于 2017-5-31 23:29:20 | 显示全部楼层
sogaside 发表于 2017-5-31 16:32
https://zhuanlan.zhihu.com/p/24393833 先看看这个吧,其实有LIN协议芯片的。

谢谢你分享的资料,我先研读下


回复

使用道具 举报

1

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-4-15 20:17:23 | 显示全部楼层
        USART_ITConfig(USART1, USART_IT_LBD, ENABLE);
        USART_ITConfig(USART1, USART_IT_RXNE, DISABLE); //这个要打开,中断里面要按字节的方式接收LIN数据。

网上有相关的教程,使用的STM32F0XX+TJA1020的,需要的请参考:
https://item.taobao.com/item.htm ... amp;id=567670729920



回复

使用道具 举报

175

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-4-16 14:51:59 | 显示全部楼层
谢谢分享
充放电数显全套方案,双口快充慢充检测电流电压,两线三线直流电压表,配套三个8尺寸15*8MM带AV电流电压单位专利数码屏,资料QQ2981074992 邮箱同上


回复

使用道具 举报

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

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2018-12-11 19:01 , Processed in 0.157969 second(s), 14 queries , Gzip On, MemCache On.

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