打印
[STM32F1]

发送中断库函数形式变寄存器形式后,程序无法进接收中断

[复制链接]
987|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yanse51|  楼主 | 2014-10-26 18:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
写了个程序。通过一个通迅接口使得PC与下位机进行数据的收发。 发送中断用库函数形式时。有的通迅接口能正确传递数据,有的通迅接口无**确传送。于是将发送中断变更为寄存器形式。 结果,只有第一次可以通过通迅接口正常接收与发送数据。接下来就无反应了。 经Debug,发现是程序无法进入接收中断。
这是为什么呢? 请多多指教。

void USART1_IRQHandler(void)
{
  //if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)

  if(USART1->SR&(1<<5))
  {
  // USART_ClearITPendingBit(USART1,USART_IT_RXNE);//steven
    USART1->SR&=~(1<<5);
    /* received data */
    USART_GetInputString();
  }

  if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET)  //就是这里。库函数形式。无**确收发数据。如果变成if((USART1->SR&(1<<7))==1)。就只实现一次正确的收发。debug,发现无法进入接收中断

   {   
    /* Write one byte to the transmit data register */
    USART_SendBufferData();
  }
  
         else if(USART1->SR&(1<<6)) //(USART_GetITStatus(USART1, USART_IT_TC) != RESET)
                 {
                        
                        //USART_ClearITPendingBit(USART1, USART_IT_TXE);         // 清除

           USART1->SR&=~(1<<7);
                        //  USART_ClearFlag(USART1,USART_FLAG_TC);
                         USART1->SR&=~(1<<6);
                 CR=1;
                 CT=0;
        //         USART1->CR1|=1<<5;

                 }
   

  
}
沙发
airwill| | 2014-10-27 08:55 | 只看该作者
经Debug,发现是程序无法进入接收中断。那就好好看你的代码。

if((USART1->SR&(1<<7))==1)  

看看你这句, 不管 SR 为什么数值,结果要么0,要么 128,
怎么都不可能  ==1

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

39

主题

88

帖子

0

粉丝