STM32/STM8技术william hill官网
直播中

刘彦杰

10年用户 40经验值
擅长:可编程逻辑 测量仪表 嵌入式技术
私信 关注
[问答]

STM31F1_HAL_LIN主机接收问题:无法接收到指定字节的数据

波形主机.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
  7.                         {
  8.                                 Lin_Data [i] = Lin_Buff [i];
  9.                         }
  10.                         Lin_Cont_EN = 1;
  11.                 }
  12.         x++;
  13. }
其他代码均没有作修改的,现在就是收不到指定字节的数据,通过DEBUG下偶尔可以看到Lin_Buff有一个字节的数据在变化,下面贴出LIN从机回复的PDI波形。
波形.jpg
下面是主机发出的数据

各位大神看是哪里的问题呀,谢谢!

回帖(3)

李骏鹏

2018-12-29 09:39:11
怀疑是中断的问题
举报

刘彦杰

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

leidasheng

2021-11-24 09:15:59
我也遇到同样的问题
举报

更多回帖

发帖
×
20
完善资料,
赚取积分