6934|1

5

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

求助,STM8S 串口一直接收中断,跳不出来! [复制链接]

程序一直在中断,跳不出来!标志位也清0了,没用
串口初始化:
void Uart_Init(void)
{
    UART1_DeInit();
    UART1_Init((u32)115200, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, \
    UART1_PARITY_NO , UART1_SYNCMODE_CLOCK_DISABLE , UART1_MODE_TXRX_ENABLE);
    UART1_ITConfig(UART1_IT_RXNE_OR,ENABLE  );
        //UART1_ITConfig(UART1_IT_TXE, DISABLE);
    UART1_Cmd(ENABLE );
  
}
串口接收:
u8 UART1_ReceiveByte(void)
{
     u8 USART1_RX_BUF;
     while (UART1_GetFlagStatus(UART1_FLAG_RXNE) == RESET);
     USART1_RX_BUF=UART1_ReceiveData8();
     return  USART1_RX_BUF;
   
}
中断函数:
@far @interrupt void UART1_RX_IRQHandler(void)
{
   u8 Res;
    if(UART1_GetITStatus(UART1_IT_RXNE)!= RESET)  
    {
   
            //UART1_ClearFlag(UART1_FLAG_RXNE);
            //UART1_ClearITPendingBit(UART1_IT_RXNE);
    /*接收中断(接收到的数据必须是0x0d 0x0a结尾)*/
            //Res =UART1_ReceiveData8();
            Res =UART1_ReceiveByte();
            //UART1_ClearITPendingBit(UART1_IT_RXNE);
            //UART1_ClearFlag(UART1_FLAG_RXNE);
        /*(USART1->DR);读取接收到的数据,当读完数据后自动取消RXNE的中断标志位*/
        if(( UART_RX_NUM&0x80)==0)/*接收未完成*/
        {
            if( UART_RX_NUM&0x40)/*接收到了0x0d*/
                {
                  //UART1_SendString("33333...",sizeof("33333..."));
                  if(Res!=0x0a) UART_RX_NUM=0;/*接收错误,重新开始*/
                  else  UART_RX_NUM|=0x80;        /*接收完成了 */
                }
        else /*还没收到0X0D*/
          {       
            if(Res==0x0d)
                    {
                                        UART_RX_NUM|=0x40;
                                        UART1_SendString("55555...",sizeof("55555..."));
                    }
            else
              {
                RxBuffer[UART_RX_NUM&0X3F]=Res ;
                UART_RX_NUM++;
                                UART1_SendString("33333...",sizeof("33333..."));
                                //UART1_GetFlagStatus(UART1_FLAG_OR);
                                #if 1
                if( UART_RX_NUM>63)
                              {
                                                  UART_RX_NUM=0;/*接收数据错误,重新开始接收*/  
                                                UART1_SendString("   44444",sizeof("   44444"));
                              }
                                #endif
              }                 
                  }
        }         
       
        //UART1_SendString("666666",sizeof("666666"));
                }
  
  
}
主函数:
int main(void)
{
   unsigned char i=0;
  /* Infinite loop */
  
  /*设置内部时钟16M为主时钟*/

  CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
  /*!
   Uart_Init();
   K_line_uart_Init();
   enableInterrupts();

   while (1)
   {if(UART_RX_NUM&0x80)
              {
                    UART1_SendString("1010...",sizeof("1010..."));
                len=UART_RX_NUM&0x3f;/*得到此次接收到的数据长度*/
                UART1_SendString("You sent the messages is:",sizeof("You sent the messages is"));
                UART1_SendString(RxBuffer,len);
                UART1_SendByte('\n');
                UART_RX_NUM=0;
              }
}
while循环一直不执行  求哪位大神指教下  谢谢  在线等!
此帖出自stm32/stm8论坛

最新回复

没有中断员也中断?  详情 回复 发表于 2014-7-13 07:26
点赞 关注
 

回复
举报

41

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
没有中断员也中断?
此帖出自stm32/stm8论坛
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表