定时器3和定时器7同时使用导致定时器3无法正常使用

2019-07-20 18:29发布

代码直接黏贴的,备注有点乱码,以前插入c文本的现在没有了额。。。

问题:这两个定时器我是用来做串口1和485的超时接收用的,
         在我调usart1和timer3的时候就收完一串数据超时就强制标记接收完成;
         后来我添加了usart2和timer7就导致timer3在接收完一串数据后无法进入更新中断。
         为什么不能同时用????

#include "timer.h"
#include "led.h"
#include "RS485.h"
#include "usart.h"
//////////////////////////////////////////////////////////////////////////////////     
//¶¨Ê±Æ÷ÖжÏÇý¶¯´úÂë      
//All rights reserved                                      
//////////////////////////////////////////////////////////////////////////////////     



TIM_HandleTypeDef TIM3_Handler;      //¶¨Ê±Æ÷¾ä±ú 3
TIM_HandleTypeDef TIM7_Handler;      //¶¨Ê±Æ÷¾ä±ú 7

//ͨÓö¨Ê±Æ÷3Öжϳõʼ»¯
//arr£º×Ô¶¯ÖØ×°Öµ¡£
//psc£ºÊ±ÖÓÔ¤·ÖƵÊý
//¶¨Ê±Æ÷Òç³öʱ¼ä¼ÆËã·½·¨:Tout=((arr+1)*(psc+1))/Ft us.
//Ft=¶¨Ê±Æ÷¹¤×÷ƵÂÊ,µ¥Î»:Mhz
//ÕâÀïʹÓõÄÊǶ¨Ê±Æ÷3!(¶¨Ê±Æ÷3¹ÒÔÚAPB1ÉÏ£¬Ê±ÖÓΪHCLK/2)
void TIM3_Init(u16 arr,u16 psc)
{  
    TIM3_Handler.Instance=TIM3;                          //ͨÓö¨Ê±Æ÷3
    TIM3_Handler.Init.Prescaler=psc;                     //·ÖƵϵÊý
    TIM3_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;    //ÏòÉϼÆÊýÆ÷
    TIM3_Handler.Init.Period=arr;                        //×Ô¶¯×°ÔØÖµ
    TIM3_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;//ʱÖÓ·ÖƵÒò×Ó
    HAL_TIM_Base_Init(&TIM3_Handler);
   
    HAL_TIM_Base_Start_IT(&TIM3_Handler); //ʹÄܶ¨Ê±Æ÷3ºÍ¶¨Ê±Æ÷3¸üÐÂÖжϣºTIM_IT_UPDATE
      __HAL_TIM_CLEAR_IT(&TIM3_Handler, TIM_IT_UPDATE);//Çå¸üÐÂÖжÏ
    __HAL_TIM_DISABLE(&TIM3_Handler);   
}



//¶¨Ê±Æ÷3ÖжϷþÎñº¯Êý
void TIM3_IRQHandler(void)
{
    HAL_TIM_IRQHandler(&TIM3_Handler);
}

void TIM7_Init(u16 arr,u16 psc)
{  
    TIM3_Handler.Instance=TIM7;                          //ͨÓö¨Ê±Æ÷7
    TIM3_Handler.Init.Prescaler=psc;                     //·ÖƵϵÊý
    TIM3_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;    //ÏòÉϼÆÊýÆ÷
    TIM3_Handler.Init.Period=arr;                        //×Ô¶¯×°ÔØÖµ
    TIM3_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;//ʱÖÓ·ÖƵÒò×Ó
    HAL_TIM_Base_Init(&TIM7_Handler);
   
    HAL_TIM_Base_Start_IT(&TIM7_Handler); //ʹÄܶ¨Ê±Æ÷7ºÍ¶¨Ê±Æ÷7¸üÐÂÖжϣºTIM_IT_UPDATE
    __HAL_TIM_CLEAR_IT(&TIM7_Handler, TIM_IT_UPDATE);//Çå¸üÐÂÖжÏ
    __HAL_TIM_DISABLE(&TIM7_Handler);   
}



//¶¨Ê±Æ÷3ÖжϷþÎñº¯Êý
void TIM7_IRQHandler(void)
{
    HAL_TIM_IRQHandler(&TIM7_Handler);
}


//»Øµ÷º¯Êý£¬¶¨Ê±Æ÷ÖжϷþÎñº¯Êýµ÷ÓÃ
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if(htim==(&TIM3_Handler))
    {
        LED1=!LED1;        //LED1·´×ª
              USART2_RX_STA|=1<<15;//±ê&#188;&#199;&#180;&#174;&#191;&#218;&#189;&#211;&#202;&#213;&#205;ê&#179;&#201;
              __HAL_TIM_DISABLE(htim);//&#202;§&#196;&#220;TIM3
    }
        if(htim==(&TIM7_Handler))
    {
        LED0=!LED0;        //LED1·&#180;×&#170;
              USART_RX_STA|=1<<15;//±ê&#188;&#199;&#180;&#174;&#191;&#218;&#189;&#211;&#202;&#213;&#205;ê&#179;&#201;
              __HAL_TIM_DISABLE(htim);//&#202;§&#196;&#220;TIM7
    }
}


//&#182;¨&#202;±&#198;÷&#181;×&#178;á&#199;&#253;&#182;&#175;&#163;&#172;&#191;&#170;&#198;&#244;&#202;±&#214;&#211;&#163;&#172;&#201;è&#214;&#195;&#214;&#208;&#182;&#207;&#211;&#197;&#207;&#200;&#188;&#182;
//&#180;&#203;&#186;&#175;&#202;&#253;&#187;á±&#187;HAL_TIM_Base_Init()&#186;&#175;&#202;&#253;&#181;÷&#211;&#195;
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
{
    if(htim->Instance==TIM3)
    {
        __HAL_RCC_TIM3_CLK_ENABLE();            //&#202;&#185;&#196;&#220;TIM3&#202;±&#214;&#211;
        HAL_NVIC_SetPriority(TIM3_IRQn,1,3);    //&#201;è&#214;&#195;&#214;&#208;&#182;&#207;&#211;&#197;&#207;&#200;&#188;&#182;&#163;&#172;&#199;&#192;&#213;&#188;&#211;&#197;&#207;&#200;&#188;&#182;1&#163;&#172;×&#211;&#211;&#197;&#207;&#200;&#188;&#182;3
        HAL_NVIC_EnableIRQ(TIM3_IRQn);          //&#191;&#170;&#198;&#244;ITM3&#214;&#208;&#182;&#207;   
    }
        if(htim->Instance==TIM7)
    {
        __HAL_RCC_TIM7_CLK_ENABLE();            //&#202;&#185;&#196;&#220;TIM7&#202;±&#214;&#211;
        HAL_NVIC_SetPriority(TIM7_IRQn,1,2);    //&#201;è&#214;&#195;&#214;&#208;&#182;&#207;&#211;&#197;&#207;&#200;&#188;&#182;&#163;&#172;&#199;&#192;&#213;&#188;&#211;&#197;&#207;&#200;&#188;&#182;1&#163;&#172;×&#211;&#211;&#197;&#207;&#200;&#188;&#182;2
        HAL_NVIC_EnableIRQ(TIM7_IRQn);          //&#191;&#170;&#198;&#244;ITM7&#214;&#208;&#182;&#207;   
    }
}


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