STM32
直播中

张伟

7年用户 1666经验值
私信 关注
[问答]

STM32与上位机通讯为什么会导致死机

STM32与上位机通讯为什么会导致死机?怎样去解决死机的问题?

回帖(1)

郭金

2021-9-24 16:05:34
  当STM32与上位机通讯数据量非常大时,往往容易导致死机,于是我们在网上查找添加以下代码:
  void USART1(void)
  {
  if (USART_GetFlagStatus(USART1, USART_FLAG_PE) != RESET)
  {
  USART_ReceiveData(USART1);
  USART_ClearFlag(USART1, USART_FLAG_PE);
  }
  if (USART_GetFlagStatus(USART1, USART_FLAG_ORE) != RESET)
  {
  USART_ReceiveData(USART1);
  USART_ClearFlag(USART1, USART_FLAG_ORE);
  }
  if (USART_GetFlagStatus(USART1, USART_FLAG_FE) != RESET)
  {
  USART_ReceiveData(USART1);
  USART_ClearFlag(USART1, USART_FLAG_FE);
  }
  if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
  {
  USART_ClearFlag(USART1, USART_FLAG_RXNE);
  USART_ClearITPendingBit(USART1, USART_IT_RXNE);
  Data = USART_ReceiveData(USART1);
  }
  }
  但还是会偶尔会死机,我原先的做法是加上独立看门狗,这样死机后立即复位。但是复位的声音,使用者不了解就会认为是异常,而且系统的稳定性大打折扣。
  但经过的不断研究,采用寄存器的方式,每接收一个字节就跳出中断,只要在中断开头加上
  void USART1(void)
  {
  UART1-》SR = 0xf5;这里可以查SR寄存器就可以啦
  Rcvuart1_Buf[Rcv_uart1_Index++] = USART_ReceiveData(USART1);
  }
  这种方式验证了很长时间~
  再加上看门狗就能有效解决 ~~
举报

更多回帖

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