STM32F4ZGT6 中的time6和time7进入中断的时间不对??求助!!!

2019-07-20 22:15发布

初始化:
int main(void)
{               
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);     //ÖD¶Ï·Ö×é  
    delay_init(168);                                                    //àÖàa¼ÆêyÆ÷

        LED_init();
//        time5_init(9999,8399);
//        time6_init(9999,8399);
        time7_init(9999,8399);   //  1 Ãë½øèëÖD¶Ïò»′Î

        while(1)
        {

        }
}

函数实现:    开始使用的寄存器  后来使用的库  但是结果是一样的,如果你定时1秒钟进入中断,那么他估计 500ms就进入了中断,如果你是设置500ms进入中断大约250ms就进入了,基本上都是你设置进入时间的  一半,真不知道是怎么原因????求大神指教,谢谢!!!
void time7_init(u16 arr,u16 psc)
{
//  SCB->AIRCR = 0x05FA0000 | 0x400;
//        RCC->APB1ENR |= (1<<5);
//        TIM7->PSC = psc;     
//        TIM7->ARR = arr;      
//        TIM7->CNT = 0;         
//        TIM7->CR1 |= (1<<7);   
//        TIM7->DIER |= 1;        
//        NVIC->IP[55] = 0x80;  
//        NVIC->ISER[1] |= (1<<(55-32));  
//        TIM7->CR1 |= 1;   
        TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7,ENABLE);               //′ò&#191;atime7 μ&#196;ê±&#214;ó

    TIM_TimeBaseInitStructure.TIM_Period = arr;                                 //time7 &#214;&#216;D&#194;×°&#212;&#216;μ&#196;&#214;μ
    TIM_TimeBaseInitStructure.TIM_Prescaler=psc;                          //·&#214;&#198;μ&#207;μêy
    TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;     //&#207;òé&#207;&#188;&#198;êy
    TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;                   
    TIM_TimeBaseInit(TIM7,&TIM_TimeBaseInitStructure);                                   //3&#245;ê&#188;&#187;ˉTIM7
   
    NVIC_InitStructure.NVIC_IRQChannel=TIM7_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x03;         //&#199;à&#213;&#188;ó&#197;&#207;è&#188;&#182;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03;                            //&#207;ìó|ó&#197;&#207;è&#188;&#182;
    NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;                                           //ê1&#196;ü&#214;D&#182;&#207;
    NVIC_Init(&NVIC_InitStructure);

    TIM_ITConfig(TIM7,TIM_IT_Update,ENABLE);                                                    //&#212;êDí&#182;¨ê±&#198;÷7&#184;üD&#194;&#214;D&#182;&#207;
    TIM_Cmd(TIM7,ENABLE);                 
}

中断函数:

u32 u32_time8_schedule_count1=0;

void TIM7_IRQHandler(void)  
{  
        u32_time8_schedule_count1++;
        if(u32_time8_schedule_count1==10)
        {
                turn_off_YX_LED();
        }
        else if(u32_time8_schedule_count1==20)
        {
                u32_time8_schedule_count1=0;
                turn_on_YX_LED();
        }
        if(TIM7->SR)  
        {  
                 LED灯放在这里就是正常的,设置多长时间亮灭就是多长时间亮灭。但是如果放在外面就像现在这样,那就是设置时间的一半,不知道什么使他进入了中断,time6也是一样,time5是正常的,希望使用过的人指点一下,谢谢!!!
        }
        TIM7->SR &= ~(0x0001);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
正点原子
1楼-- · 2019-07-21 01:29
说明你定时器的时钟有问题。
STM32新学习者
2楼-- · 2019-07-21 04:29
 精彩回答 2  元偷偷看……

一周热门 更多>