18186|4

6

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

STM32如何将接收LIN总线数据 [复制链接]

      各位大侠,大家端午安康!小弟最近初学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);
        }       
}

此帖出自汽车电子论坛

最新回复

谢谢分享  详情 回复 发表于 2018-4-16 14:51
点赞 关注

回复
举报

53

帖子

1

TA的资源

一粒金砂(中级)

沙发
 
https://zhuanlan.zhihu.com/p/24393833 先看看这个吧,其实有LIN协议芯片的。
此帖出自汽车电子论坛
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
sogaside 发表于 2017-5-31 16:32
https://zhuanlan.zhihu.com/p/24393833 先看看这个吧,其实有LIN协议芯片的。

谢谢你分享的资料,我先研读下
此帖出自汽车电子论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

4
 
        USART_ITConfig(USART1, USART_IT_LBD, ENABLE);
        USART_ITConfig(USART1, USART_IT_RXNE, DISABLE); //这个要打开,中断里面要按字节的方式接收LIN数据。

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

此帖出自汽车电子论坛
 
 
 

回复

369

帖子

0

TA的资源

一粒金砂(中级)

5
 
谢谢分享
此帖出自汽车电子论坛
个人签名充放电数显全套方案,双口快充慢充检测电流电压,两线三线直流电压表,配套三个8尺寸15*8MM带AV电流电压单位专利数码屏,资料QQ2981074992 邮箱同上
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表