F4板子,两个定时器同时工作时,只有一个工作正常,怎么回事?

2019-07-20 15:27发布

本帖最后由 challenger 于 2017-4-5 20:58 编辑

stm32F4,GPS模块接在串口3上,定时器7控制串口3中断(原子哥例程),GPRS模块接在串口2上(改了原子哥串口3的配制代码,变成串口2接GPRS模块),本来也是定时器7控制中断,被我改为定时器5控制中断。GPRS与GPS两个程序分开运行都正常。可是合并后,只能运行一个GPRS,怎么回事?是中断优先级没设置好,或是定时器7与定时器5中的哪个变量重复使用了,运行异常?

这是串口2配制,复制串口3,更改的:

__align(8) u8 USART2_TX_BUF[USART2_MAX_SEND_LEN];         //·¢Ëí»o3å,×î′óUSART2_MAX_SEND_LEN×Ö½ú
#ifdef USART2_RX_EN                                                                   //èç1ûê1Äüá˽óêÕ            
u8 USART2_RX_BUF[USART2_MAX_RECV_LEN];                 


u16 USART2_RX_STA=0;            
void USART2_IRQHandler(void)
{
        u8 res;            
        if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)//½óêÕμ½êy¾Y
        {         

        res =USART_ReceiveData(USART2);               
        if((USART2_RX_STA&(1<<15))==0)                  //&#189;óê&#213;íêμ&#196;ò&#187;&#197;úêy&#190;Y,&#187;1&#195;&#187;óD±&#187;′|àí,&#212;ò2&#187;&#212;ù&#189;óê&#213;&#198;&#228;&#203;&#251;êy&#190;Y
        {
                if(USART2_RX_STA<USART2_MAX_RECV_LEN)                //&#187;1&#191;éò&#212;&#189;óê&#213;êy&#190;Y
                {
                        //TIM_SetCounter(TIM7,0);                 //&#188;&#198;êy&#198;÷&#199;&#229;&#191;&#213;  
      TIM_SetCounter(TIM5,0);                 //&#188;&#198;êy&#198;÷&#199;&#229;&#191;&#213;                           
                        if(USART2_RX_STA==0)               
                                //TIM_Cmd(TIM7, ENABLE);              //ê1&#196;ü&#182;¨ê±&#198;÷5
                        TIM_Cmd(TIM5, ENABLE);              //ê1&#196;ü&#182;¨ê±&#198;÷5
                        USART2_RX_BUF[USART2_RX_STA++]=res;                //&#188;&#199;&#194;&#188;&#189;óê&#213;μ&#189;μ&#196;&#214;μ         
                }else
                {
                        USART2_RX_STA|=1<<15;                                        //&#199;&#191;&#214;&#198;±ê&#188;&#199;&#189;óê&#213;íê3é
                }
        }         
}                                                                                 
}  
#endif        
//3&#245;ê&#188;&#187;ˉIO ′&#174;&#191;ú2
//bound:2¨ì&#216;&#194;ê         


void usart2_init(u32 bound)
{  

        NVIC_InitTypeDef NVIC_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;

        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);      //ê1&#196;üGPIOAê±&#214;ó
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);     //ê1&#196;üUSART2ê±&#214;ó  RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, ENABLE);

         USART_DeInit(USART2);                                     //&#184;′&#206;&#187;′&#174;&#191;ú2
        
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_USART2);  //GPIOA2&#184;′ó&#195;&#206;aUSART2
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_USART2);  //GPIOA3&#184;′ó&#195;&#206;aUSART2        
        
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;    //GPIOA2oíGPIOA33&#245;ê&#188;&#187;ˉ
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;              //&#184;′ó&#195;1|&#196;ü
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                //&#203;ù&#182;è50MHz
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;            //í&#198;íì&#184;′ó&#195;ê&#228;3&#246;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;              //é&#207;à-
        GPIO_Init(GPIOA,&GPIO_InitStructure);                     //3&#245;ê&#188;&#187;ˉGPIOA2£&#172;oíGPIOA3
        
        USART_InitStructure.USART_BaudRate = bound;                                    //2¨ì&#216;&#194;ê
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;                    //×&#214;3¤&#206;a8&#206;&#187;êy&#190;Y&#184;&#241;ê&#189;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;                         //ò&#187;&#184;&#246;í£&#214;1&#206;&#187;
        USART_InitStructure.USART_Parity = USART_Parity_No;                            //&#206;T&#198;&#230;&#197;&#188;D£&#209;é&#206;&#187;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//&#206;Tó2&#188;têy&#190;Yá÷&#191;&#216;&#214;&#198;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;                      //ê&#213;·¢&#196;£ê&#189;

        USART_Init(USART2, &USART_InitStructure);                                      //3&#245;ê&#188;&#187;ˉ′&#174;&#191;ú2

        USART_Cmd(USART2, ENABLE);                                                     //ê1&#196;ü′&#174;&#191;ú
        
  USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);            //&#191;a&#198;&#244;&#214;D&#182;&#207;   
        
        NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;//&#199;à&#213;&#188;ó&#197;&#207;è&#188;&#182;2
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;                //×óó&#197;&#207;è&#188;&#182;3
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQí¨μàê1&#196;ü
        NVIC_Init(&NVIC_InitStructure);                                //&#184;ù&#190;Y&#214;&#184;&#182;¨μ&#196;2&#206;êy3&#245;ê&#188;&#187;ˉVIC&#188;&#196;′&#230;&#198;÷
        TIM5_Int_Init(100-1,8400-1);                                    //10ms&#214;D&#182;&#207;
        USART2_RX_STA=0;                                                //&#199;&#229;á&#227;
        TIM_Cmd(TIM5, DISABLE);                                 //1&#216;±&#213;&#182;¨ê±&#198;÷5
}


//′&#174;&#191;ú2,printf oˉêy
//è·±£ò&#187;′&#206;·¢&#203;íêy&#190;Y2&#187;3&#172;1yUSART2_MAX_SEND_LEN×&#214;&#189;ú
void u2_printf(char* fmt,...)  
{  
        u16 i,j;
        va_list ap;
        va_start(ap,fmt);
        vsprintf((char*)USART2_TX_BUF,fmt,ap);
        va_end(ap);
        i=strlen((const char*)USART2_TX_BUF);                     //′&#203;′&#206;·¢&#203;íêy&#190;Yμ&#196;3¤&#182;è
        for(j=0;j<i;j++)                                          //&#209;-&#187;··¢&#203;íêy&#190;Y
        {
          while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);//μè′yé&#207;′&#206;′&#171;ê&#228;íê3é
                USART_SendData(USART2,(uint8_t)USART2_TX_BUF[j]);           //·¢&#203;íêy&#190;Yμ&#189;′&#174;&#191;ú2
        }
        
}


这是串口3配制:
u16 USART3_RX_STA=0;            
void USART3_IRQHandler(void)
{
        u8 res;            
        if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)//&#189;óê&#213;μ&#189;êy&#190;Y
        {         

        res =USART_ReceiveData(USART3);               
        if((USART3_RX_STA&(1<<15))==0)//&#189;óê&#213;íêμ&#196;ò&#187;&#197;úêy&#190;Y,&#187;1&#195;&#187;óD±&#187;′|àí,&#212;ò2&#187;&#212;ù&#189;óê&#213;&#198;&#228;&#203;&#251;êy&#190;Y
        {
                if(USART3_RX_STA<USART3_MAX_RECV_LEN)                //&#187;1&#191;éò&#212;&#189;óê&#213;êy&#190;Y
                {
                        TIM_SetCounter(TIM7,0);//&#188;&#198;êy&#198;÷&#199;&#229;&#191;&#213;                                         
                        if(USART3_RX_STA==0)               
                                TIM_Cmd(TIM7, ENABLE);  //ê1&#196;ü&#182;¨ê±&#198;÷7
                        USART3_RX_BUF[USART3_RX_STA++]=res;                //&#188;&#199;&#194;&#188;&#189;óê&#213;μ&#189;μ&#196;&#214;μ         
                }else
                {
                        USART3_RX_STA|=1<<15;                                        //&#199;&#191;&#214;&#198;±ê&#188;&#199;&#189;óê&#213;íê3é
                }
        }         
}                                                                                 
}  
#endif       
//3&#245;ê&#188;&#187;ˉIO ′&#174;&#191;ú3
//bound:2¨ì&#216;&#194;ê          
void usart3_init(u32 bound)
{  

        NVIC_InitTypeDef NVIC_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;

       
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE); //ê1&#196;üGPIOBê±&#214;ó
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);//ê1&#196;üUSART3ê±&#214;ó

        USART_DeInit(USART3);  //&#184;′&#206;&#187;′&#174;&#191;ú3
       
        GPIO_PinAFConfig(GPIOB,GPIO_PinSource11,GPIO_AF_USART3); //GPIOB11&#184;′ó&#195;&#206;aUSART3
        GPIO_PinAFConfig(GPIOB,GPIO_PinSource10,GPIO_AF_USART3); //GPIOB10&#184;′ó&#195;&#206;aUSART3       
       
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_10; //GPIOB11oíGPIOB103&#245;ê&#188;&#187;ˉ
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//&#184;′ó&#195;1|&#196;ü
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //&#203;ù&#182;è50MHz
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //í&#198;íì&#184;′ó&#195;ê&#228;3&#246;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //é&#207;à-
        GPIO_Init(GPIOB,&GPIO_InitStructure); //3&#245;ê&#188;&#187;ˉGPIOB11£&#172;oíGPIOB10
       
        USART_InitStructure.USART_BaudRate = bound;//2¨ì&#216;&#194;ê
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×&#214;3¤&#206;a8&#206;&#187;êy&#190;Y&#184;&#241;ê&#189;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;//ò&#187;&#184;&#246;í£&#214;1&#206;&#187;
        USART_InitStructure.USART_Parity = USART_Parity_No;//&#206;T&#198;&#230;&#197;&#188;D£&#209;é&#206;&#187;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//&#206;Tó2&#188;têy&#190;Yá÷&#191;&#216;&#214;&#198;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;        //ê&#213;·¢&#196;£ê&#189;

        USART_Init(USART3, &USART_InitStructure); //3&#245;ê&#188;&#187;ˉ′&#174;&#191;ú3

        USART_Cmd(USART3, ENABLE);               //ê1&#196;ü′&#174;&#191;ú
       
  USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//&#191;a&#198;&#244;&#214;D&#182;&#207;   
       
        NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;//&#199;à&#213;&#188;ó&#197;&#207;è&#188;&#182;2
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;                //×óó&#197;&#207;è&#188;&#182;3
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQí¨μàê1&#196;ü
        NVIC_Init(&NVIC_InitStructure);        //&#184;ù&#190;Y&#214;&#184;&#182;¨μ&#196;2&#206;êy3&#245;ê&#188;&#187;ˉVIC&#188;&#196;′&#230;&#198;÷
        TIM7_Int_Init(1000-1,8400-1);                //100ms&#214;D&#182;&#207;
        USART3_RX_STA=0;                //&#199;&#229;á&#227;
        TIM_Cmd(TIM7, DISABLE); //1&#216;±&#213;&#182;¨ê±&#198;÷7
         

}

//′&#174;&#191;ú3,printf oˉêy
//è·±£ò&#187;′&#206;·¢&#203;íêy&#190;Y2&#187;3&#172;1yUSART3_MAX_SEND_LEN×&#214;&#189;ú
void u3_printf(char* fmt,...)  
{  
        u16 i,j;
        va_list ap;
        va_start(ap,fmt);
        vsprintf((char*)USART3_TX_BUF,fmt,ap);
        va_end(ap);
        i=strlen((const char*)USART3_TX_BUF);//′&#203;′&#206;·¢&#203;íêy&#190;Yμ&#196;3¤&#182;è
        for(j=0;j<i;j++)//&#209;-&#187;··¢&#203;íêy&#190;Y
        {
          while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET);  //μè′yé&#207;′&#206;′&#171;ê&#228;íê3é
                USART_SendData(USART3,(uint8_t)USART3_TX_BUF[j]);          //·¢&#203;íêy&#190;Yμ&#189;′&#174;&#191;ú3
        }
       


以下是定时器7与定时器5的代码,原来两个模块接的都是定时器7,我把TIM7,直接变成TIM5,分开运行都正常。合并成一个工程后,发现调用函数,两个一起,只能运行一个模块。我注释任意一个函数,留下一个函数,都能正常运行。请哪位帮我指点指点,究竟哪儿出了问题?感谢!

extern vu16 USART3_RX_STA;      //&#182;¨ê±&#198;÷7&#197;&#228;o&#207;′&#174;&#191;ú3&#191;&#216;&#214;&#198;GPS
//&#182;¨ê±&#198;÷7&#214;D&#182;&#207;·t&#206;&#241;3ìDò                    
void TIM7_IRQHandler(void)
{         
        if (TIM_GetITStatus(TIM7, TIM_IT_Update) != RESET)//ê&#199;&#184;üD&#194;&#214;D&#182;&#207;
        {                                    
                USART3_RX_STA|=1<<15;        //±ê&#188;&#199;&#189;óê&#213;íê3é
                TIM_ClearITPendingBit(TIM7, TIM_IT_Update  );  //&#199;&#229;3yTIM7&#184;üD&#194;&#214;D&#182;&#207;±ê&#214;&#190;   
                TIM_Cmd(TIM7, DISABLE);  //1&#216;±&#213;TIM7
        }            
}


void TIM7_Int_Init(u16 arr,u16 psc)
{        
        NVIC_InitTypeDef NVIC_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7, ENABLE);//TIM7ê±&#214;óê1&#196;ü   
        
        //&#182;¨ê±&#198;÷TIM73&#245;ê&#188;&#187;ˉ
        TIM_TimeBaseStructure.TIM_Period = arr; //éè&#214;&#195;&#212;ú&#207;&#194;ò&#187;&#184;&#246;&#184;üD&#194;ê&#194;&#188;t×°è&#235;&#187;&#238;&#182;ˉμ&#196;×&#212;&#182;ˉ&#214;&#216;×°&#212;&#216;&#188;&#196;′&#230;&#198;÷&#214;ü&#198;úμ&#196;&#214;μ        
        TIM_TimeBaseStructure.TIM_Prescaler =psc; //éè&#214;&#195;ó&#195;à′×÷&#206;aTIMxê±&#214;ó&#198;μ&#194;ê3yêyμ&#196;&#212;¤·&#214;&#198;μ&#214;μ
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //éè&#214;&#195;ê±&#214;ó·&#214;&#184;&#238;:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM&#207;òé&#207;&#188;&#198;êy&#196;£ê&#189;
        TIM_TimeBaseInit(TIM7, &TIM_TimeBaseStructure); //&#184;ù&#190;Y&#214;&#184;&#182;¨μ&#196;2&#206;êy3&#245;ê&#188;&#187;ˉTIMxμ&#196;ê±&#188;&#228;&#187;ùêyμ¥&#206;&#187;

        TIM_ITConfig(TIM7,TIM_IT_Update,ENABLE ); //ê1&#196;ü&#214;&#184;&#182;¨μ&#196;TIM7&#214;D&#182;&#207;,&#212;êDí&#184;üD&#194;&#214;D&#182;&#207;

                  
        NVIC_InitStructure.NVIC_IRQChannel = TIM7_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0 ;//&#199;à&#213;&#188;ó&#197;&#207;è&#188;&#182;0
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;                //×óó&#197;&#207;è&#188;&#182;1
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQí¨μàê1&#196;ü
        NVIC_Init(&NVIC_InitStructure);        //&#184;ù&#190;Y&#214;&#184;&#182;¨μ&#196;2&#206;êy3&#245;ê&#188;&#187;ˉVIC&#188;&#196;′&#230;&#198;÷
        
}


//////////////////////////////////////////////////////////////////////////////////

extern vu16 USART2_RX_STA;    //        &#182;¨ê±&#198;÷5        &#197;&#228;o&#207;′&#174;&#191;ú2,&#191;&#216;&#214;&#198;GPRS

void TIM5_SetARR(u16 period)  //&#182;¨ê±&#198;÷5
{
          TIM_SetCounter(TIM5,0);//&#188;&#198;êy&#198;÷&#199;&#229;&#191;&#213;
          TIM5->ARR&=0x00;       //&#207;è&#199;&#229;&#212;¤×°&#212;&#216;&#214;ü&#198;ú&#214;μ&#206;a0
          TIM5->ARR|= period;    //&#184;üD&#194;&#212;¤×°&#212;&#216;&#214;ü&#198;ú&#214;μ
}

//&#182;¨ê±&#198;÷5&#214;D&#182;&#207;·t&#206;&#241;3ìDò                    
void TIM5_IRQHandler(void)   //GPRS
{         
        static u8 i=0;
        
        if(TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET) //ê&#199;&#184;üD&#194;&#214;D&#182;&#207;
        {                                    
                TIM_ClearITPendingBit(TIM5, TIM_IT_Update  );  //&#199;&#229;3yTIM5&#184;üD&#194;&#214;D&#182;&#207;±ê&#214;&#190;   
                if(Scan_Wtime!=0)//à&#182;&#209;àé¨&#195;è&#196;£ê&#189;
                {
                        i++;
                        if(i==Scan_Wtime)
                        {
                                i=0;
                                Scan_Wtime = 0;
                                USART2_RX_STA|=1<<15;         //±ê&#188;&#199;&#189;óê&#213;íê3é
                                TIM_Cmd(TIM5, DISABLE);  //1&#216;±&#213;&#182;¨ê±&#198;÷5
                                TIM5_SetARR(100-1);      //&#214;&#216;D&#194;éè&#214;&#195;&#206;a10ms&#214;D&#182;&#207;
                        }
                }
                else//·&#199;à&#182;&#209;àé¨&#195;è&#196;£ê&#189;
        {
             USART2_RX_STA|=1<<15;             //±ê&#188;&#199;&#189;óê&#213;íê3é
                         TIM_Cmd(TIM5, DISABLE);     //1&#216;±&#213;TIM5
                          
                }
        }            
}

//í¨ó&#195;&#182;¨ê±&#198;÷&#214;D&#182;&#207;3&#245;ê&#188;&#187;ˉ
//&#213;aà&#239;ê&#188;&#214;&#213;&#209;&#161;&#212;&#241;&#206;aAPB1μ&#196;2±&#182;£&#172;&#182;&#248;APB1&#206;a36M
//arr£o×&#212;&#182;ˉ&#214;&#216;×°&#214;μ&#161;£
//psc£oê±&#214;ó&#212;¤·&#214;&#198;μêy                 
void TIM5_Int_Init(u16 arr,u16 psc)
{        
        NVIC_InitTypeDef NVIC_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);//TIM5ê±&#214;óê1&#196;ü   
        
        //&#182;¨ê±&#198;÷TIM73&#245;ê&#188;&#187;ˉ
        TIM_TimeBaseStructure.TIM_Period = arr;                    //éè&#214;&#195;&#212;ú&#207;&#194;ò&#187;&#184;&#246;&#184;üD&#194;ê&#194;&#188;t×°è&#235;&#187;&#238;&#182;ˉμ&#196;×&#212;&#182;ˉ&#214;&#216;×°&#212;&#216;&#188;&#196;′&#230;&#198;÷&#214;ü&#198;úμ&#196;&#214;μ        
        TIM_TimeBaseStructure.TIM_Prescaler =psc;                  //éè&#214;&#195;ó&#195;à′×÷&#206;aTIMxê±&#214;ó&#198;μ&#194;ê3yêyμ&#196;&#212;¤·&#214;&#198;μ&#214;μ
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;    //éè&#214;&#195;ê±&#214;ó·&#214;&#184;&#238;:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//TIM&#207;òé&#207;&#188;&#198;êy&#196;£ê&#189;
        TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure);            //&#184;ù&#190;Y&#214;&#184;&#182;¨μ&#196;2&#206;êy3&#245;ê&#188;&#187;ˉTIMxμ&#196;ê±&#188;&#228;&#187;ùêyμ¥&#206;&#187;

        TIM_ITConfig(TIM5,TIM_IT_Update,ENABLE );                  //ê1&#196;ü&#214;&#184;&#182;¨μ&#196;TIM5&#214;D&#182;&#207;,&#212;êDí&#184;üD&#194;&#214;D&#182;&#207;


        NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;  
        //NVIC_InitStructure.NVIC_IRQChannel = TIM6_DAC_IRQn  ;  
        //NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0 ;   //&#199;à&#213;&#188;ó&#197;&#207;è&#188;&#182;0
        //NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;                   //×óó&#197;&#207;è&#188;&#182;1
        
                NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0 ;   //&#199;à&#213;&#188;ó&#197;&#207;è&#188;&#182;0
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;                   //×óó&#197;&#207;è&#188;&#182;1
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                           //IRQí¨μàê1&#196;ü
        NVIC_Init(&NVIC_InitStructure);                                   //&#184;ù&#190;Y&#214;&#184;&#182;¨μ&#196;2&#206;êy3&#245;ê&#188;&#187;ˉVIC&#188;&#196;′&#230;&#198;÷
        
}




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。