查看: 14034|回复: 26

[原创] [TRK-KEA128]LIN通讯实验

[复制链接]
  • TA的每日心情

    2016-10-20 09:45
  • 签到天数: 1 天

    [LV.1]初来乍到

    80

    主题

    1038

    帖子

    5

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    2223
    最后登录
    2023-11-20
    发表于 2015-12-24 22:25:28 | 显示全部楼层 |阅读模式
    本帖最后由 花溪村长 于 2015-12-25 08:49 编辑

    LIN的基础知识就不介绍了!前面已发过帖子!需要的可以去看看
    [S12G系列]LIN通讯协议及LIN发送程序实现
    今天这个主要在KEA128上实现LIN通讯
    先上电路图:
    2.PNG
    然后使用UART进行LIN通讯,同样需要设置UART_S2的BRK13位为1设置13位断点字符长度,然后设置UART_C2的SBK进行发送断点已进行同步间隔段的发送!
    这次测试直接使用CANoe进行测试!
    IMG_20151224_220429.jpg
    使用LIN板子供电需要12V(直接用小鱼夹夹上掉下来12V把OpenSDA给烧了!板子没法下载程序了!!!真尼玛郁闷!)
    IMG_20151224_220351.jpg

    然后打开CANoe进行监控LIN报文:
    捕获.PNG
    500ms发送一次!
    最后直接上程序进行分析:
    1. <div class="blockcode"><blockquote>void LIN_Init(uint32_t baud)
    2. {
    3.         GPIO_InitTypeDef GPIO_InitStructure;
    4.         GPIO_InitStructure.GPIOx = PTB;     //PORT端口选择
    5.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;  //选择输出模式
    6.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4; //PTC 0~3  
    7.         GPIO_InitStructure.GPIO_InitState = Bit_SET;       //低电平
    8.         GPIO_Init(&GPIO_InitStructure);     //初始化
    9.         
    10.         //UART
    11.         UART_InitTypeDef UART_InitStruct;
    12.         UART_InitStruct.UART_BaudRate = baud; //波特率
    13.         UART_InitStruct.UART_WordLength = UART_WordLength_8b ;  //数据长度
    14.         UART_InitStruct.UART_StopBits = UART_StopBits_1;       //停止位
    15.         UART_InitStruct.UART_Parity = UART_Parity_No;          //奇偶校验
    16.         UART_InitStruct.UART_Mode = UART_Mode_Rx|UART_Mode_Tx; //RX TX使能
    17.         UART_InitStruct.UART_PIN = RX_PB0_TX_PB1 ;             //RX_PD6_TX_PD7
    18.         UART_Init(UART0,&UART_InitStruct);                     //初始化UART
    19.         
    20.         UART0->S2 |= UART_S2_BRK13_MASK ;
    21.                 //UART_ITConfig(UART2,UART_IT_RXNE, ENABLE);             //中断使能
    22.         //NVIC_Init(UART2_IRQn,2);                              //中断使能 分组2
    23.         
    24. }

    25. /**
    26.   * @brief 发送同步间隔段
    27.   * @param   
    28.   * @retval
    29.   */
    30. void LIN_SendBreak(UART_Type* UARTx)
    31. {
    32.   while(!(UARTx->S1 & UART_S1_TDRE_MASK));  //等待发送数据寄存器(缓冲器)为空
    33.   UARTx->C2 |= UART_C2_SBK_MASK  ;           //队列待发送的中止字符
    34.   UARTx->C2 &= ~UART_C2_SBK_MASK;           //返回正常发送操作
    35. }

    36. /**
    37.   * @brief LIN奇偶校验计算
    38.   * @param   
    39.   * @retval
    40.   */
    41. uint8_t LIN_CalcParity(uint8_t id)
    42. {
    43.   uint8_t parity, p0,p1;
    44.   parity=id;
    45.   p0=(BIT(parity,0)^BIT(parity,1)^BIT(parity,2)^BIT(parity,4))<<6;     //偶校验位
    46.   p1=(!(BIT(parity,1)^BIT(parity,3)^BIT(parity,4)^BIT(parity,5)))<<7;  //奇校验位
    47.   parity|=(p0|p1);
    48.   return parity;
    49. }


    50.   /**
    51.    * @brief LIN校验和计算
    52.    * @param   
    53.    * @retval
    54.    */
    55. uint8_t LIN_Checksum(uint8_t id,uint8_t *data,uint8_t length)
    56. {
    57.    uint8_t i;
    58.    uint32_t check_sum = 0;
    59.    if(id != 0x3c && id != 0x7d)  //使用增强型校验
    60.    {
    61.           check_sum  = id ;
    62.    }
    63.    else //使用标准校验
    64.    {
    65.           check_sum = 0 ;
    66.    }
    67.    for (i = 0; i < length; i++)
    68.          {         
    69.            check_sum += *(data++);
    70.            
    71.            if (check_sum > 0xFF)          //进位
    72.            {
    73.                  check_sum -= 0xFF;
    74.            }
    75.          }
    76.          return (~check_sum);  //取反
    77. }

    78.   /**
    79.    * @brief LIN发送函数
    80.    * @param   
    81.    * @retval
    82.    */
    83. uint8_t LIN_Send_Msg(UART_Type* UARTx,LIN_Msg *SendMsg)
    84. {
    85.    uint8_t pid ,i ,check_sum;
    86.    if(SendMsg->ID == 0xff||SendMsg->ID == 0x00)
    87.    return (FALSE);
    88.    //发送间隔同步段
    89.    LIN_SendBreak(UARTx);
    90.          
    91.    //发送同步场
    92.    UART_SendData(UARTx,0x55);
    93.   
    94.    //计算PID
    95.    pid = LIN_CalcParity(SendMsg->ID);
    96.    //发送PID
    97.     UART_SendData(UARTx,pid);
    98.   
    99.    //发送数据场
    100.    for(i=0; i <SendMsg->length ; i++)         
    101.         {
    102.           // 发送数据场
    103.            UART_SendData(UARTx,SendMsg->Data[i]);      

    104.         }
    105.         //计算校验和                        
    106.    check_sum = LIN_Checksum(pid,SendMsg->Data,SendMsg->length);
    107.     UART_SendData(UARTx,check_sum);

    108.          return(TRUE);
    109. }
    复制代码

    附上工程:

    TRK-KEA128 - LIN.rar (834.6 KB, 下载次数: 607)

    评分

    参与人数 1NXP金币 +30 收起 理由
    小七 + 30 赞一个!

    查看全部评分

    回复

    使用道具 举报

  • TA的每日心情
    开心
    2017-1-24 09:50
  • 签到天数: 2 天

    [LV.1]初来乍到

    654

    主题

    3262

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    11059
    最后登录
    2019-1-27
    发表于 2015-12-25 09:19:50 | 显示全部楼层
    不错哦~
    回复

    使用道具 举报

    该用户从未签到

    9

    主题

    642

    帖子

    0

    高级会员

    Rank: 4

    积分
    748
    最后登录
    1970-1-1
    发表于 2015-12-25 09:27:13 | 显示全部楼层
    学习村长
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-1-6 07:38
  • 签到天数: 736 天

    [LV.9]以坛为家II

    21

    主题

    3486

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    5093
    最后登录
    2024-1-7
    发表于 2015-12-25 10:09:03 | 显示全部楼层
    好东西,学习一下
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-2-9 14:16
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    25

    主题

    1785

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2245
    最后登录
    2024-4-12
    发表于 2015-12-25 12:07:10 | 显示全部楼层
    不错,谢谢分享
    nxpic.org.png
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-2-9 14:16
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    25

    主题

    1785

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2245
    最后登录
    2024-4-12
    发表于 2015-12-25 12:08:45 | 显示全部楼层
    先收藏了,有时间研究一下LIN
    nxpic.org.png
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-5-24 10:39
  • 签到天数: 1 天

    [LV.1]初来乍到

    140

    主题

    2087

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3913
    最后登录
    2020-5-24
    发表于 2015-12-25 22:06:45 | 显示全部楼层
    建议将你的KEA系列整一汇总帖
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-4-28 12:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    8

    主题

    280

    帖子

    0

    高级会员

    Rank: 4

    积分
    802
    最后登录
    2021-9-5
    发表于 2015-12-27 13:27:09 | 显示全部楼层
    过来学习一下
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2016-10-20 09:45
  • 签到天数: 1 天

    [LV.1]初来乍到

    80

    主题

    1038

    帖子

    5

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    2223
    最后登录
    2023-11-20
     楼主| 发表于 2015-12-28 09:03:17 | 显示全部楼层
    suoma 发表于 2015-12-25 22:06
    建议将你的KEA系列整一汇总帖

    不会弄
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-8-14 22:47
  • 签到天数: 608 天

    [LV.9]以坛为家II

    26

    主题

    1169

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3009
    最后登录
    2020-9-13
    发表于 2015-12-28 10:09:39 | 显示全部楼层
    坐等CAN。。。。。
    哎...今天够累的,签到来了~
    回复

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-26 13:42 , Processed in 0.140963 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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