意法半导体三合一开发板的stm8s开发板上串口无法进入接收中断

2019-07-19 22:01发布

如题,开发环境是iar,代码如下
串口初始化

void UART3_INIT(void)
{
    u16 baud_div=0;
   
    /*1位起始位 8位数据位 结束位由CR3设置 不使用奇偶校验 */
    UART3_CR1 = (0<<4)|(0<<2);
   
    UART3_CR3 = 0x00;
    /*使能发送和接收 接收中断使能 禁止发送中断*/
    //UART3_CR2 = (0<<7)|(0<<6)|(1<<5)|(0<<4)|(1<<3)|(1<<2);
    UART3_CR2_TEN = 1;
    UART3_CR2_REN = 1;
    UART3_CR2_RIEN = 1;
   
    /*设置1位停止位 不使能SCLK*/
    //UART3_CR3 = (0<<6)|(0<<4)|(0<<3);
   
     /*使用智能卡模式需要设置的,基本上保持默认就行了 */
   // UART3_CR5 = (0<<2)|(0<<1);    
    
    /*设置波特率*/

    baud_div =(SysClockFreq/BaudRate);  /*求出分频因子*/
    
   
    UART3_BRR2 = ((u8)(baud_div & 0x0f)) | ((u8)((baud_div & 0xf000) >> 8)) ;
    //UART3_BRR2 |= (u8)((baud_div & 0xf000) >> 8);
    UART3_BRR1 = (u8)((baud_div & 0x0ff0) >> 4);    /*先给BRR2赋值 最后再设置BRR1*/
   
    UART3_CR1 |= (0<<5);         /*使能UART*/
}
中断处理函数: #pragma vector=0x17
__interrupt void UART3_RX_IRQHandler(void)
{
#if 0
    u8 Res;
    if(UART3_SR & UART_FLAG_RXNE) 
    {/*接收中断(接收到的数据必须是0x0d 0x0a结尾)*/
 Res =(u8)UART3_DR;
        /*(USART1->DR);读取接收到的数据,当读完数据后自动取消RXNE的中断标志位*/
 if(( UART_RX_NUM&0x80)==0)/*接收未完成*/
 {
     if( UART_RX_NUM&0x40)/*接收到了0x0d*/
            {
                if(Res!=0x0a)
                    UART_RX_NUM=0;/*接收错误,重新开始*/
                else 
                    UART_RX_NUM|=0x80; /*接收完成了 */
            }
            else /*还没收到0X0D*/
            { 
                if(Res==0x0d)
                    UART_RX_NUM|=0x40;
                else
                {
                    RxBuffer[ UART_RX_NUM&0X3F]=Res ;
                    UART_RX_NUM++;
                    if( UART_RX_NUM>63)
                        UART_RX_NUM=0;/*接收数据错误,重新开始接收*/ 
                }  
            }
  }    
    } 
#else
    unsigned char c;
    c = UART3_DR;          // 接收到数据了
    while(!UART3_SR_TXE);
    c++;                              // 把接收到的数据加1
    UART3_DR = c;         // 再发回去,为什么这么做?在电脑上串口调试软件里发1就收到2,发A就收到B,看运行结果比较方便 
#endif
}

主函数初始化串口,没做其他的,请原子大哥和各位帮忙指点下!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。