STM32
直播中

周静

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

为什么STM32串口中断里面使用printf会出现错误呢

为什么STM32串口中断里面使用printf会出现错误呢?怎样才能实现这种提示信息呢?

回帖(1)

李贞

2021-11-16 09:23:17
  //串口收发中断处理函数
  void UART_TRxOver_Interrupt(void)
  {
  if(USART_GetITStatus(USART1, USART_IT_TXE) == SET)
  {
  //发送中断
  //清零中断
  USART_ClearITPendingBit(USART1, USART_IT_TXE);
  Derive_UART1SendFlag = False;
  //tx interrupt.。
  //。..
  if(!Derive_UART1SendFlag)
  {
  USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
  Derive_UART1TxIntState = False;
  }
  }
  if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET)
  {
  //接收中断
  //-------- »回传接收到的信息 --------
  printf(“这是接收到的数据:”);
  USART_SendData(USART1,(u8)USART_ReceiveData(USART1));
  while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
  }
  }
  就是在这个里面,包含了printf就无法全部回传发送的信息
  if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET)
  {
  //接收中断
  //-------- »回传接收到的信息 --------
  printf(“这是接收到的数据:”);
  USART_SendData(USART1,(u8)USART_ReceiveData(USART1));
  while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
  }
  
  但是将printf 注释掉以后,发送什么信息过去,就会回传什么信息,不会遗漏
  if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET)
  {
  //接收中断
  //-------- »回传接收到的信息 --------
  //printf(“这是接收到的数据:”);
  USART_SendData(USART1,(u8)USART_ReceiveData(USART1));
  while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
  }
  
  刚刚开始学习stm 32 ,也在网上查了很多资料,实在有些不理解这里的原因。网上有帖子说
  printf 放在中断里,相当于中断中嵌入中断,不能实现,那怎样才能实现这种提示信息呢?
  求大神指导指导!!!
举报

更多回帖

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