关于SIM卡和GPS定位功能整合

2019-07-20 14:15发布

我想做一个通过SIM卡的短信功能把当前位置发送给其他人,单个功能都尝试了,但是放在一起始终调不通。sim卡用的是串口3,GPS用的是串口2,sim卡功能正常,但是串口2始终获取不到定位信息,单个跑GPS程序可以获取定位信息
网上看了可能是双串口问题,但是也没能解决,希望有志之士能给予解答一下,以下是我的串口初始化和中断处理
[mw_shl_code=c,true]//串口2
u16 USART2_RX_STA=0;            
void USART2_IRQHandler(void)
{
        if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)//ÊǸüÐÂÖжÏ
        {                                   
                USART2_RX_STA|=1<<15;        //±ê&#188;&#199;&#189;&#211;&#202;&#213;&#205;ê&#179;&#201;
                TIM_ClearITPendingBit(TIM2, TIM_IT_Update  );  //&#199;&#229;&#179;&#253;TIM7&#184;ü&#208;&#194;&#214;&#208;&#182;&#207;±ê&#214;&#190;   
                TIM_Cmd(TIM2, DISABLE);  //&#185;&#216;±&#213;TIM7
        }                                                                                 
}  
#endif       
//&#179;&#245;&#202;&#188;&#187;&#175;IO &#180;&#174;&#191;&#218;3
//bound:&#178;¨&#204;&#216;&#194;&#202;          
void usart2_init(u32 bound)
{  

        NVIC_InitTypeDef NVIC_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;

       
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);      //&#202;&#185;&#196;&#220;GPIOB&#202;±&#214;&#211;
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);     //&#202;&#185;&#196;&#220;USART2&#202;±&#214;&#211;

        USART_DeInit(USART2);                                     //&#184;&#180;&#206;&#187;&#180;&#174;&#191;&#218;3
       
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_USART2);  //GPIOB11&#184;&#180;&#211;&#195;&#206;&#170;USART3
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_USART2);  //GPIOB10&#184;&#180;&#211;&#195;&#206;&#170;USART3       
       
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_2;    //GPIOB11&#186;&#205;GPIOB10&#179;&#245;&#202;&#188;&#187;&#175;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;              //&#184;&#180;&#211;&#195;&#185;&#166;&#196;&#220;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;              //&#203;&#217;&#182;&#200;50MHz
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;            //&#205;&#198;&#205;ì&#184;&#180;&#211;&#195;&#202;&#228;&#179;&#246;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;              //&#201;&#207;&#192;&#173;
        GPIO_Init(GPIOA,&GPIO_InitStructure);                     //&#179;&#245;&#202;&#188;&#187;&#175;GPIOB11&#163;&#172;&#186;&#205;GPIOB10
       
        USART_InitStructure.USART_BaudRate = bound;                                    //&#178;¨&#204;&#216;&#194;&#202;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;                    //×&#214;&#179;¤&#206;&#170;8&#206;&#187;&#202;&#253;&#190;&#221;&#184;&#241;&#202;&#189;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;                         //&#210;&#187;&#184;&#246;&#205;&#163;&#214;&#185;&#206;&#187;
        USART_InitStructure.USART_Parity = USART_Parity_No;                            //&#206;&#222;&#198;&#230;&#197;&#188;&#208;&#163;&#209;é&#206;&#187;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//&#206;&#222;&#211;&#178;&#188;&#254;&#202;&#253;&#190;&#221;&#193;÷&#191;&#216;&#214;&#198;
        USART_InitStructure.USART_Mode = USART_Mode_Rx;                      //&#202;&#213;·&#162;&#196;&#163;&#202;&#189;
  
        USART_Init(USART2, &USART_InitStructure);                                      //&#179;&#245;&#202;&#188;&#187;&#175;&#180;&#174;&#191;&#218;3

        USART_Cmd(USART2, ENABLE);                                                     //&#202;&#185;&#196;&#220;&#180;&#174;&#191;&#218;
       
  USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);            //&#191;&#170;&#198;&#244;&#214;&#208;&#182;&#207;   
       
        NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;//&#199;&#192;&#213;&#188;&#211;&#197;&#207;&#200;&#188;&#182;2
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;                //×&#211;&#211;&#197;&#207;&#200;&#188;&#182;3
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQ&#205;¨&#181;&#192;&#202;&#185;&#196;&#220;
        NVIC_Init(&NVIC_InitStructure);                                //&#184;ù&#190;&#221;&#214;&#184;&#182;¨&#181;&#196;&#178;&#206;&#202;&#253;&#179;&#245;&#202;&#188;&#187;&#175;VIC&#188;&#196;&#180;&#230;&#198;÷
        TIM2_Int_Init(100-1,8400-1);                                    //10ms&#214;&#208;&#182;&#207;
        USART2_RX_STA=0;                                                //&#199;&#229;&#193;&#227;
        TIM_Cmd(TIM2, DISABLE);                                 //&#185;&#216;±&#213;&#182;¨&#202;±&#198;÷7


}[/mw_shl_code]

[mw_shl_code=c,true]//串口3
u16 USART3_RX_STA=0;            
void USART3_IRQHandler(void)
{
        u8 res;            
        if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)//&#189;&#211;&#202;&#213;&#181;&#189;&#202;&#253;&#190;&#221;
        {         

        res =USART_ReceiveData(USART3);               
        if((USART3_RX_STA&(1<<15))==0)                  //&#189;&#211;&#202;&#213;&#205;ê&#181;&#196;&#210;&#187;&#197;ú&#202;&#253;&#190;&#221;,&#187;&#185;&#195;&#187;&#211;&#208;±&#187;&#180;&#166;&#192;í,&#212;ò&#178;&#187;&#212;&#217;&#189;&#211;&#202;&#213;&#198;&#228;&#203;&#251;&#202;&#253;&#190;&#221;
        {
                if(USART3_RX_STA<USART3_MAX_RECV_LEN)                //&#187;&#185;&#191;&#201;&#210;&#212;&#189;&#211;&#202;&#213;&#202;&#253;&#190;&#221;
                {
                        TIM_SetCounter(TIM7,0);                 //&#188;&#198;&#202;&#253;&#198;÷&#199;&#229;&#191;&#213;                                         
                        if(USART3_RX_STA==0)               
                                TIM_Cmd(TIM7, ENABLE);              //&#202;&#185;&#196;&#220;&#182;¨&#202;±&#198;÷7
                        USART3_RX_BUF[USART3_RX_STA++]=res;                //&#188;&#199;&#194;&#188;&#189;&#211;&#202;&#213;&#181;&#189;&#181;&#196;&#214;&#181;         
                }else
                {
                        USART3_RX_STA|=1<<15;                                        //&#199;&#191;&#214;&#198;±ê&#188;&#199;&#189;&#211;&#202;&#213;&#205;ê&#179;&#201;
                }
        }         
}                                                                                 
}  
#endif       
//&#179;&#245;&#202;&#188;&#187;&#175;IO &#180;&#174;&#191;&#218;3
//bound:&#178;¨&#204;&#216;&#194;&#202;          
void usart3_init(u32 bound)
{  

        NVIC_InitTypeDef NVIC_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;

       
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);      //&#202;&#185;&#196;&#220;GPIOB&#202;±&#214;&#211;
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);     //&#202;&#185;&#196;&#220;USART3&#202;±&#214;&#211;

        USART_DeInit(USART3);                                     //&#184;&#180;&#206;&#187;&#180;&#174;&#191;&#218;3
       
        GPIO_PinAFConfig(GPIOB,GPIO_PinSource11,GPIO_AF_USART3);  //GPIOB11&#184;&#180;&#211;&#195;&#206;&#170;USART3
        GPIO_PinAFConfig(GPIOB,GPIO_PinSource10,GPIO_AF_USART3);  //GPIOB10&#184;&#180;&#211;&#195;&#206;&#170;USART3       
       
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_10;    //GPIOB11&#186;&#205;GPIOB10&#179;&#245;&#202;&#188;&#187;&#175;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;              //&#184;&#180;&#211;&#195;&#185;&#166;&#196;&#220;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;              //&#203;&#217;&#182;&#200;50MHz
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;            //&#205;&#198;&#205;ì&#184;&#180;&#211;&#195;&#202;&#228;&#179;&#246;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;              //&#201;&#207;&#192;&#173;
        GPIO_Init(GPIOB,&GPIO_InitStructure);                     //&#179;&#245;&#202;&#188;&#187;&#175;GPIOB11&#163;&#172;&#186;&#205;GPIOB10
       
        USART_InitStructure.USART_BaudRate = bound;                                    //&#178;¨&#204;&#216;&#194;&#202;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;                    //×&#214;&#179;¤&#206;&#170;8&#206;&#187;&#202;&#253;&#190;&#221;&#184;&#241;&#202;&#189;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;                         //&#210;&#187;&#184;&#246;&#205;&#163;&#214;&#185;&#206;&#187;
        USART_InitStructure.USART_Parity = USART_Parity_No;                            //&#206;&#222;&#198;&#230;&#197;&#188;&#208;&#163;&#209;é&#206;&#187;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//&#206;&#222;&#211;&#178;&#188;&#254;&#202;&#253;&#190;&#221;&#193;÷&#191;&#216;&#214;&#198;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;                      //&#202;&#213;·&#162;&#196;&#163;&#202;&#189;
  
        USART_Init(USART3, &USART_InitStructure);                                      //&#179;&#245;&#202;&#188;&#187;&#175;&#180;&#174;&#191;&#218;3

        USART_Cmd(USART3, ENABLE);                                                     //&#202;&#185;&#196;&#220;&#180;&#174;&#191;&#218;
       
  USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);            //&#191;&#170;&#198;&#244;&#214;&#208;&#182;&#207;   
       
        NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;//&#199;&#192;&#213;&#188;&#211;&#197;&#207;&#200;&#188;&#182;2
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;                //×&#211;&#211;&#197;&#207;&#200;&#188;&#182;3
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQ&#205;¨&#181;&#192;&#202;&#185;&#196;&#220;
        NVIC_Init(&NVIC_InitStructure);                                //&#184;ù&#190;&#221;&#214;&#184;&#182;¨&#181;&#196;&#178;&#206;&#202;&#253;&#179;&#245;&#202;&#188;&#187;&#175;VIC&#188;&#196;&#180;&#230;&#198;÷
        TIM7_Int_Init(100-1,8400-1);                                    //10ms&#214;&#208;&#182;&#207;
        USART3_RX_STA=0;                                                //&#199;&#229;&#193;&#227;
        TIM_Cmd(TIM7, DISABLE);                                 //&#185;&#216;±&#213;&#182;¨&#202;±&#198;÷7
            USART_ClearFlag(USART3, USART_FLAG_TC);

}[/mw_shl_code]

[mw_shl_code=c,true]//定时器初始化
extern vu16 USART3_RX_STA;

//&#182;¨&#202;±&#198;÷7&#197;&#228;&#214;&#195;&#212;¤×°&#212;&#216;&#214;&#220;&#198;&#218;&#214;&#181;
void TIM7_SetARR(u16 period)
{
          TIM_SetCounter(TIM7,0);//&#188;&#198;&#202;&#253;&#198;÷&#199;&#229;&#191;&#213;
          TIM7->ARR&=0x00;       //&#207;&#200;&#199;&#229;&#212;¤×°&#212;&#216;&#214;&#220;&#198;&#218;&#214;&#181;&#206;&#170;0
          TIM7->ARR|= period;    //&#184;ü&#208;&#194;&#212;¤×°&#212;&#216;&#214;&#220;&#198;&#218;&#214;&#181;
}


//&#182;¨&#202;±&#198;÷7&#214;&#208;&#182;&#207;·&#254;&#206;&#241;&#179;&#204;&#208;ò                    
void TIM7_IRQHandler(void)
{        
        static u8 i=0;
       
        if(TIM_GetITStatus(TIM7, TIM_IT_Update) != RESET) //&#202;&#199;&#184;ü&#208;&#194;&#214;&#208;&#182;&#207;
        {                                   
                TIM_ClearITPendingBit(TIM7, TIM_IT_Update  );  //&#199;&#229;&#179;&#253;TIM7&#184;ü&#208;&#194;&#214;&#208;&#182;&#207;±ê&#214;&#190;   
                if(Scan_Wtime!=0)//&#192;&#182;&#209;&#192;&#201;¨&#195;è&#196;&#163;&#202;&#189;
                {
                        i++;
                        if(i==Scan_Wtime)
                        {
                                i=0;
                                Scan_Wtime = 0;
                                USART3_RX_STA|=1<<15;         //±ê&#188;&#199;&#189;&#211;&#202;&#213;&#205;ê&#179;&#201;
                                TIM_Cmd(TIM7, DISABLE);  //&#185;&#216;±&#213;&#182;¨&#202;±&#198;÷7
                                TIM7_SetARR(100-1);      //&#214;&#216;&#208;&#194;&#201;è&#214;&#195;&#206;&#170;10ms&#214;&#208;&#182;&#207;
                        }
                }
                else//·&#199;&#192;&#182;&#209;&#192;&#201;¨&#195;è&#196;&#163;&#202;&#189;
        {
             USART3_RX_STA|=1<<15;             //±ê&#188;&#199;&#189;&#211;&#202;&#213;&#205;ê&#179;&#201;
                         TIM_Cmd(TIM7, DISABLE);     //&#185;&#216;±&#213;TIM7
                          
                }
        }            
}

//&#205;¨&#211;&#195;&#182;¨&#202;±&#198;÷&#214;&#208;&#182;&#207;&#179;&#245;&#202;&#188;&#187;&#175;
//&#213;&#226;&#192;&#239;&#202;&#188;&#214;&#213;&#209;&#161;&#212;&#241;&#206;&#170;APB1&#181;&#196;2±&#182;&#163;&#172;&#182;&#248;APB1&#206;&#170;36M
//arr&#163;&#186;×&#212;&#182;&#175;&#214;&#216;×°&#214;&#181;&#161;&#163;
//psc&#163;&#186;&#202;±&#214;&#211;&#212;¤·&#214;&#198;&#181;&#202;&#253;                 
void TIM7_Int_Init(u16 arr,u16 psc)
{       
        NVIC_InitTypeDef NVIC_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7, ENABLE);//TIM7&#202;±&#214;&#211;&#202;&#185;&#196;&#220;   
       
        //&#182;¨&#202;±&#198;÷TIM7&#179;&#245;&#202;&#188;&#187;&#175;
        TIM_TimeBaseStructure.TIM_Period = arr;                    //&#201;è&#214;&#195;&#212;&#218;&#207;&#194;&#210;&#187;&#184;&#246;&#184;ü&#208;&#194;&#202;&#194;&#188;&#254;×°&#200;&#235;&#187;&#238;&#182;&#175;&#181;&#196;×&#212;&#182;&#175;&#214;&#216;×°&#212;&#216;&#188;&#196;&#180;&#230;&#198;÷&#214;&#220;&#198;&#218;&#181;&#196;&#214;&#181;       
        TIM_TimeBaseStructure.TIM_Prescaler =psc;                  //&#201;è&#214;&#195;&#211;&#195;&#192;&#180;×÷&#206;&#170;TIMx&#202;±&#214;&#211;&#198;&#181;&#194;&#202;&#179;&#253;&#202;&#253;&#181;&#196;&#212;¤·&#214;&#198;&#181;&#214;&#181;
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;    //&#201;è&#214;&#195;&#202;±&#214;&#211;·&#214;&#184;&#238;:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//TIM&#207;ò&#201;&#207;&#188;&#198;&#202;&#253;&#196;&#163;&#202;&#189;
        TIM_TimeBaseInit(TIM7, &TIM_TimeBaseStructure);            //&#184;ù&#190;&#221;&#214;&#184;&#182;¨&#181;&#196;&#178;&#206;&#202;&#253;&#179;&#245;&#202;&#188;&#187;&#175;TIMx&#181;&#196;&#202;±&#188;&#228;&#187;ù&#202;&#253;&#181;&#165;&#206;&#187;

        TIM_ITConfig(TIM7,TIM_IT_Update,ENABLE );                  //&#202;&#185;&#196;&#220;&#214;&#184;&#182;¨&#181;&#196;TIM7&#214;&#208;&#182;&#207;,&#212;&#202;&#208;í&#184;ü&#208;&#194;&#214;&#208;&#182;&#207;

                   
        NVIC_InitStructure.NVIC_IRQChannel = TIM7_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0 ;   //&#199;&#192;&#213;&#188;&#211;&#197;&#207;&#200;&#188;&#182;0
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;                   //×&#211;&#211;&#197;&#207;&#200;&#188;&#182;1
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                           //IRQ&#205;¨&#181;&#192;&#202;&#185;&#196;&#220;
        NVIC_Init(&NVIC_InitStructure);                                   //&#184;ù&#190;&#221;&#214;&#184;&#182;¨&#181;&#196;&#178;&#206;&#202;&#253;&#179;&#245;&#202;&#188;&#187;&#175;VIC&#188;&#196;&#180;&#230;&#198;÷
       
}

extern vu16 USART2_RX_STA;

////&#182;¨&#202;±&#198;÷7&#197;&#228;&#214;&#195;&#212;¤×°&#212;&#216;&#214;&#220;&#198;&#218;&#214;&#181;
void TIM2_SetARR(u16 period)
{
          TIM_SetCounter(TIM2,0);//&#188;&#198;&#202;&#253;&#198;÷&#199;&#229;&#191;&#213;
          TIM2->ARR&=0x00;       //&#207;&#200;&#199;&#229;&#212;¤×°&#212;&#216;&#214;&#220;&#198;&#218;&#214;&#181;&#206;&#170;0
          TIM2->ARR|= period;    //&#184;ü&#208;&#194;&#212;¤×°&#212;&#216;&#214;&#220;&#198;&#218;&#214;&#181;
}
//&#182;¨&#202;±&#198;÷7&#214;&#208;&#182;&#207;·&#254;&#206;&#241;&#179;&#204;&#208;ò                    
void TIM2_IRQHandler(void)
{        
        static u8 i=0;
       
        if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //&#202;&#199;&#184;ü&#208;&#194;&#214;&#208;&#182;&#207;
        {                                   
                TIM_ClearITPendingBit(TIM2, TIM_IT_Update  );  //&#199;&#229;&#179;&#253;TIM7&#184;ü&#208;&#194;&#214;&#208;&#182;&#207;±ê&#214;&#190;   
                if(Scan_Wtime!=0)//&#192;&#182;&#209;&#192;&#201;¨&#195;è&#196;&#163;&#202;&#189;
                {
                        i++;
                        if(i==Scan_Wtime)
                        {
                                i=0;
                                Scan_Wtime = 0;
                                USART2_RX_STA|=1<<15;         //±ê&#188;&#199;&#189;&#211;&#202;&#213;&#205;ê&#179;&#201;
                                TIM_Cmd(TIM2, DISABLE);  //&#185;&#216;±&#213;&#182;¨&#202;±&#198;÷7
                                TIM2_SetARR(100-1);      //&#214;&#216;&#208;&#194;&#201;è&#214;&#195;&#206;&#170;10ms&#214;&#208;&#182;&#207;
                        }
                }
                else//·&#199;&#192;&#182;&#209;&#192;&#201;¨&#195;è&#196;&#163;&#202;&#189;
        {
             USART2_RX_STA|=1<<15;             //±ê&#188;&#199;&#189;&#211;&#202;&#213;&#205;ê&#179;&#201;
                         TIM_Cmd(TIM2, DISABLE);     //&#185;&#216;±&#213;TIM7
                          
                }
        }            
}

//&#205;¨&#211;&#195;&#182;¨&#202;±&#198;÷&#214;&#208;&#182;&#207;&#179;&#245;&#202;&#188;&#187;&#175;
//&#213;&#226;&#192;&#239;&#202;&#188;&#214;&#213;&#209;&#161;&#212;&#241;&#206;&#170;APB1&#181;&#196;2±&#182;&#163;&#172;&#182;&#248;APB1&#206;&#170;36M
//arr&#163;&#186;×&#212;&#182;&#175;&#214;&#216;×°&#214;&#181;&#161;&#163;
//psc&#163;&#186;&#202;±&#214;&#211;&#212;¤·&#214;&#198;&#181;&#202;&#253;                 
void TIM2_Int_Init(u16 arr,u16 psc)
{       
        NVIC_InitTypeDef NVIC_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);//TIM7&#202;±&#214;&#211;&#202;&#185;&#196;&#220;   
       
        //&#182;¨&#202;±&#198;÷TIM7&#179;&#245;&#202;&#188;&#187;&#175;
        TIM_TimeBaseStructure.TIM_Period = arr; //&#201;è&#214;&#195;&#212;&#218;&#207;&#194;&#210;&#187;&#184;&#246;&#184;ü&#208;&#194;&#202;&#194;&#188;&#254;×°&#200;&#235;&#187;&#238;&#182;&#175;&#181;&#196;×&#212;&#182;&#175;&#214;&#216;×°&#212;&#216;&#188;&#196;&#180;&#230;&#198;÷&#214;&#220;&#198;&#218;&#181;&#196;&#214;&#181;       
        TIM_TimeBaseStructure.TIM_Prescaler =psc; //&#201;è&#214;&#195;&#211;&#195;&#192;&#180;×÷&#206;&#170;TIMx&#202;±&#214;&#211;&#198;&#181;&#194;&#202;&#179;&#253;&#202;&#253;&#181;&#196;&#212;¤·&#214;&#198;&#181;&#214;&#181;
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //&#201;è&#214;&#195;&#202;±&#214;&#211;·&#214;&#184;&#238;:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM&#207;ò&#201;&#207;&#188;&#198;&#202;&#253;&#196;&#163;&#202;&#189;
        TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //&#184;ù&#190;&#221;&#214;&#184;&#182;¨&#181;&#196;&#178;&#206;&#202;&#253;&#179;&#245;&#202;&#188;&#187;&#175;TIMx&#181;&#196;&#202;±&#188;&#228;&#187;ù&#202;&#253;&#181;&#165;&#206;&#187;

        TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE ); //&#202;&#185;&#196;&#220;&#214;&#184;&#182;¨&#181;&#196;TIM7&#214;&#208;&#182;&#207;,&#212;&#202;&#208;í&#184;ü&#208;&#194;&#214;&#208;&#182;&#207;

                   
        NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0 ;//&#199;&#192;&#213;&#188;&#211;&#197;&#207;&#200;&#188;&#182;0
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;                //×&#211;&#211;&#197;&#207;&#200;&#188;&#182;1
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQ&#205;¨&#181;&#192;&#202;&#185;&#196;&#220;
        NVIC_Init(&NVIC_InitStructure);        //&#184;ù&#190;&#221;&#214;&#184;&#182;¨&#181;&#196;&#178;&#206;&#202;&#253;&#179;&#245;&#202;&#188;&#187;&#175;VIC&#188;&#196;&#180;&#230;&#198;÷

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