[STM32F1] STM32串口全局运行接收数据异常?

[复制链接]
1372|0
 楼主| it_yrj 发表于 2014-7-16 23:20 | 显示全部楼层 |阅读模式
之前在其他的应用中可以正常工作,因为更换了硬件电路,在使能接收模式的时候会自动回复一个字符0,所以先使能接受模式后开启的接收中断,但是
利用串口调试助手周期发送字符,在串口中断中收到什么发送什么,但是在单步运行的时候可以正常收发,全局运行的时候有时收到的数正确有时就不正确,
大多数情况下收到的数据是错的,试着加了延时,还是不行,这种情况出现的原因有哪些呢?还请大神们指教啊!
  1. void USART1_IRQHandler(void)
  2. {
  3.   //接收中断
  4.   unsigned char temp_trx;
  5.   if(USART_GetITStatus(USART1,USART_IT_RXNE)==1)
  6.   {
  7.     OS_CPU_SR cpu_sr;
  8.     OS_ENTER_CRITICAL();
  9.    
  10.     USART_ClearITPendingBit(USART1,USART_IT_RXNE); /*清接收中断标志*/
  11.     temp_trx=USART_ReceiveData(USART1); /*读取接收数据*/
  12.   
  13.     St2Pt_EN();/*RS485使能 ST输出到Pt   //转为输出模式*/
  14.     delay(10);
  15.     Uart1_SendByte(temp_trx);    //*将接收到的数据发送出去*/
  16.     Pt2St_EN(); /*RS485使能 PT输出到St   //发送完成之后改为接收状态*/
  17.     delay(10);
  18.     OS_EXIT_CRITICAL();
  19.   }
  20.   //发送完成中断
  21.    if(USART_GetITStatus(USART1,USART_IT_TXE)!=RESET)
  22.   {
  23.     USART_ClearITPendingBit(USART1,USART_IT_TC); /*清发送寄存器空标志*/
  24.                 USART_ITConfig(USART1,USART_IT_TXE,DISABLE); /*DISABLE 发送完成中断 */
  25.                
  26.     Pt2St_EN();/*RS485使能 PT输出到St。发送完成之后改为接收状态*/
  27.                 /*此语句会触发一次接收中断(0xBB),注释掉之后,可以正常的发送数据*/
  28.   }
  29. }


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

本版积分规则

63

主题

615

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部