UART3不进中断 大神们看下啊 指点

2019-07-20 08:23发布

UART可以发送单个字符,当加入中断后 无法进入中断 代码如下 :void USART3_IRQHandler(void)                        //′®¿ú3ÖD¶Ï·tÎñ3ìDò
{
        u8 Res;
#if SYSTEM_SUPPORT_OS                
        OSIntEnter();   
#endif
        if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
        {
                Res =USART_ReceiveData(USART3);       
               
                if((USART3_RX_STA&0x8000)==0)
                {
                        if(USART3_RX_STA&0x4000)
                        {
                                if(Res!=0x0a)USART3_RX_STA=0;
                                else USART3_RX_STA|=0x8000;         
                        }
                        else //»1ûêÕμ½0X0D
                        {       
                                if(Res==0x0d)USART3_RX_STA|=0x4000;
                                else
                                {
                                        USART3_RX_BUF[USART3_RX_STA&0X3FFF]=Res ;
                                        USART3_RX_STA++;
                                        if(USART3_RX_STA>(USART_REC_LEN-1))USART3_RX_STA=0;//½óêÕêy¾Y′íÎó,ÖØD¿aê¼½óêÕ          
                                }                 
                        }
                }                    
  }
#if SYSTEM_SUPPORT_OS         //èç1ûSYSTEM_SUPPORT_OSÎaÕ棬ÔòDèòaÖ§3ÖOS.
        OSIntExit();                                                                                           
#endif
}

#endif


代码几乎跟UART1的中断函数一样,只是把接收状态标志改了USART3_RX_STA,缓冲区改为USART3_RX_BUF;别的地方基本没变。跟中断相关的操作 我也基本配置了
#define EN_USART3_RX                         1        //定义使能接收
在串口3中还包含了
#if EN_USART3_RX       
        USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//¿aÆôÏà1ØÖD¶Ï

        //Usart1 NVIC ÅäÖÃ
  NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;               
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;               
        NVIC_Init(&NVIC_InitStructure);       
#endif


没办法进中断,大神看下啊。
在线等,实在是搞不明白。。。


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
Sun_Fly
1楼-- · 2019-07-20 13:15
 精彩回答 2  元偷偷看……
VIP小太子456
2楼-- · 2019-07-20 13:53
代码都没给全,时钟打开了吗,端口对不对..
wangbo411326
3楼-- · 2019-07-20 17:09
都对,不用中断的话,主函数
USART_SendData(USART3,'c');
可以实现,但是加入中断的话,源代码的通信协议以0D 0A结尾
我这里没变,我编写了一个测试函数,
void ceshi (   )
{
           u8 len1,j;
                if(USART3_RX_STA&0x8000)
                {                                          
                        len1=USART3_RX_STA&0x3fff;//μÃμ½′Ë′νóêÕμ½μÄêy¾Y3¤¶è
                        if(USART3_RX_BUF[0]==0x13)
                        {
           USART_SendData(USART3,'b');
                                       
                  }
                        USART3_RX_STA=0;       
   }
}
用电脑定时发送13 0d 0a
在主函数调用这个函数
发现没进入中断,大神指点下啊
wangbo411326
4楼-- · 2019-07-20 21:37
 精彩回答 2  元偷偷看……
Sun_Fly
5楼-- · 2019-07-21 02:31
要学会论坛搜索
执迷
6楼-- · 2019-07-21 03:15
 精彩回答 2  元偷偷看……

一周热门 更多>