发 帖  
原厂入驻New
[问答] STM31F1_HAL_LIN主机接收问题:无法接收到指定字节的数据
713 stm32cubemx DEBUG
分享
波形主机.jpg 在CUBEMX上生成LIN模式的代码,增加了一些代码(如下),通过逻辑分析仪看LIN上的信号是正常,现在的问题就是无法接收到指定字节的数据:发送和接收都是用的中断。
下面是main50ms调度首次的主节点发出的数据,这里OK。
  1. case 0:
  2.             LIN_RPID = 0xB1;
  3.                                                 //TstLin1_MASTER_SendBuff[0] = 0x31;
  4.                                                 TstLin1_MASTER_SendBuff[0] = 0x03;
  5.             TstLin1_MASTER_SendBuff[1] = 0x0A;
  6.             TstLin1_MASTER_SendBuff[2] = 0xFC;
  7.             TstLin1_MASTER_SendBuff[3] = 0x00;
  8.             TstLin1_MASTER_SendBuff[4] = 0x04;
  9.                                                 TstLin1_MASTER_SendBuff[5] = 0x00;
  10.                                                 TstLin1_MASTER_SendBuff[6] = 0x00;
  11.                                                 TstLin1_MASTER_SendBuff[7] = 0x00;
  12.                                 
  13.                                                 sum = LIN_RPID;
  14.                                                 for(ix = 0; ix < 8; ix++)
  15.                                                 {
  16.                                                         sum += TstLin1_MASTER_SendBuff[ix];
  17.                                                         IF(sum & 0xFF00)
  18.                                                         {
  19.                                                                 sum = (sum & 0x00FF) + 1;
  20.                                                         }
  21.                                                 }
  22.                                                 sum ^= 0x00FF;
  23.                                                 TstLin1_MASTER_SendBuff[8] = (uint8_t)sum;
  24.                                                 while(HAL_LIN_SendBreak(&huart1 ) != HAL_OK );
  25.                                                 while(HAL_UART_Transmit_IT(&huart1, &lin_data1 , 1) != HAL_OK);
  26.                                                 while(HAL_UART_Transmit_IT(&huart1, &LIN_RPID , 1) != HAL_OK);
  27.                                                 while(HAL_UART_Transmit_IT(&huart1, TstLin1_MASTER_SendBuff , 9) != HAL_OK){}
  28.                                                 //while(HAL_UART_Transmit_IT(&huart1, (uint8_t *)sum , 1) != HAL_OK);
  29.             //Lin1MASTER_SendDataStream(TstLin1_MASTER_SendBuff, 4, TstLin1_Master_Cks);
  30.             TstLIN1_MasterCnt++;
  31.             break;
复制代码
再50ms后发送从机的PID,并开启接收中断。
  1. case 2:
  2.                                                 LIN_RLEN = 9;
  3.                                                 while(HAL_LIN_SendBreak(&huart1 ) != HAL_OK );
  4.                                                 while(HAL_UART_Transmit_IT(&huart1, &lin_data1 , 1) != HAL_OK );  //发55
  5.                                                 while(HAL_UART_Transmit_IT(&huart1, &lin_data2 , 1) != HAL_OK ); //发PDI
  6.                                                 while(HAL_UART_Receive_IT(&huart1, Lin_Buff, LIN_RLEN) != HAL_OK );//开中断
  7.                                                 TstLIN1_MasterCnt++;
  8.             break;
复制代码
中断回调函数如下。
  1. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  2. {
  3.   uint8_t ls_data,i;
  4.                 if(huart ->Instance == USART1)
  5.                 {
  6.                         for(i=0;i<LIN_RLEN ;i++)
  7.                         {
  8.                                 Lin_Data [i] = Lin_Buff [i];
  9.                         }
  10.                         Lin_Cont_EN = 1;
  11.                 }
  12.         x++;
  13. }
复制代码
其他代码均没有作修改的,现在就是收不到指定字节的数据,通过debug下偶尔可以看到Lin_Buff有一个字节的数据在变化,下面贴出LIN从机回复的PDI波形。
波形.jpg
下面是主机发出的数据

各位大神看是哪里的问题呀,谢谢!
0
2018-12-29 00:51:34   评论 分享淘帖 邀请回答
2个回答
2018-12-29 09:39:11 评论

举报

自己顶一下,还是没有找到答案。
2018-12-29 18:52:28 评论

举报

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
我要提问
关闭

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

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