stm32l151串口中断进不去

2019-07-21 02:16发布

串口配置
[mw_shl_code=c,true]void uart3_init(u32 bound)

{
    //GPIO¶Ë¿ÚÉèÖÃ
    GPIO_InitTypeDef GPIO_InitStructure;
    USART_InitTypeDef USART_InitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
    GPIO_PinAFConfig(GPIOB,GPIO_PinSource10,GPIO_AF_USART3);
    GPIO_PinAFConfig(GPIOB,GPIO_PinSource11,GPIO_AF_USART3);
    /*
        *  USART3_TX -> PB10 , USART3_RX -> PB11
        */                               
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //ÍÆÍ츴ÓÃÊä³ö
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //ÉÏÀ­
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
    //Usart3 NVIC ÅäÖÃ

    NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;//ÇÀÕ¼ÓÅÏȼ¶1
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;                //×ÓÓÅÏȼ¶1
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQͨµÀʹÄÜ
    NVIC_Init(&NVIC_InitStructure);        //¸ù¾ÝÖ¸¶¨µÄ²ÎÊý³õʼ»¯VIC¼Ä´æÆ÷

    //USART ³õʼ»¯ÉèÖÃ

    USART_InitStructure.USART_BaudRate = bound;//Ò»°ãÉèÖÃΪ9600;
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×Ö³¤Îª8λÊý¾Ý¸ñʽ
    USART_InitStructure.USART_StopBits = USART_StopBits_1;//Ò»¸öֹͣλ
    USART_InitStructure.USART_Parity = USART_Parity_No;//ÎÞÆæżУÑéλ
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//ÎÞÓ²¼þÊý¾ÝÁ÷¿ØÖÆ
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;        //ÊÕ·¢Ä£Ê½

    USART_Init(USART3, &USART_InitStructure); //³õʼ»¯´®¿Ú
                USART_Cmd(USART3, ENABLE);                    //ʹÄÜ´®¿Ú
    USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//¿ªÆôÖжÏ
   

}[/mw_shl_code]
中断这里是原子哥的程序
[mw_shl_code=c,true]void USART3_IRQHandler(void)
{
        u8 res;             
        if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)//½ÓÊÕµ½Êý¾Ý
        {         
                USART3_RX_STA|=1<<15;       
                res =USART_ReceiveData(USART3);                 
                if((USART3_RX_STA&(1<<15))==0)  //&frac12;&Oacute;&Ecirc;&Otilde;&Iacute;ê&micro;&Auml;&Ograve;&raquo;&Aring;ú&Ecirc;&yacute;&frac34;&Yacute;,&raquo;&sup1;&Atilde;&raquo;&Oacute;&ETH;±&raquo;&acute;&brvbar;&Agrave;í,&Ocirc;ò&sup2;&raquo;&Ocirc;&Ugrave;&frac12;&Oacute;&Ecirc;&Otilde;&AElig;&auml;&Euml;&ucirc;&Ecirc;&yacute;&frac34;&Yacute;
                {
                        if(USART3_RX_STA<BUFLEN)             //&raquo;&sup1;&iquest;&Eacute;&Ograve;&Ocirc;&frac12;&Oacute;&Ecirc;&Otilde;&Ecirc;&yacute;&frac34;&Yacute;
                        {  
                                TIM_SetCounter(TIM7,0);     //&frac14;&AElig;&Ecirc;&yacute;&AElig;÷&Ccedil;&aring;&iquest;&Otilde;                                          //&frac14;&AElig;&Ecirc;&yacute;&AElig;÷&Ccedil;&aring;&iquest;&Otilde;
                                if(USART3_RX_STA==0)                                 //&Ecirc;&sup1;&Auml;&Uuml;&para;¨&Ecirc;±&AElig;÷7&micro;&Auml;&Ouml;&ETH;&para;&Iuml;
                                {
                                        TIM_Cmd(TIM7,ENABLE);     //&Ecirc;&sup1;&Auml;&Uuml;&para;¨&Ecirc;±&AElig;÷7
                                }
                                USART3_RX_BUF[USART3_RX_STA++]=res;        //&frac14;&Ccedil;&Acirc;&frac14;&frac12;&Oacute;&Ecirc;&Otilde;&micro;&frac12;&micro;&Auml;&Ouml;&micro;         
                        }
                        else
                        {
                                USART3_RX_STA|=1<<15;                                //&Ccedil;&iquest;&Ouml;&AElig;±ê&frac14;&Ccedil;&frac12;&Oacute;&Ecirc;&Otilde;&Iacute;ê&sup3;&Eacute;
                        }
                }
        }                                                                                                                            
}  [/mw_shl_code]

主函数里我写的很简单就是if(USART3_RX_STA&0X8000) ,然后打印个字符。 我把gps模块接过来,中断进不去。gps我接电脑测是有在发送数据的。搞不懂为啥呀




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
1599064432
1楼-- · 2019-07-21 07:03
你在中断那边设断点了吗
momo最可爱
2楼-- · 2019-07-21 07:23
 精彩回答 2  元偷偷看……
zxczxc1208
3楼-- · 2019-07-21 12:53
momo最可爱 发表于 2019-4-27 14:58
设置中断分组了吗,有数据进去吗,你是仿真看的有没有进中断吗,仿真的话你要打断点,调试你可以先用串口助 ...

没用仿真,我又在中断里加了
n++;
   printf("n=%d ",n);        然后串口助手监测不到,主函数里也是串口中断没进去吧,
if(USART3_RX_STA&0X8000) 里面的都打印不出来,这个if外面可以打印

一周热门 更多>