初始化:
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); //′ò¿atime7 μÄê±Öó
TIM_TimeBaseInitStructure.TIM_Period = arr; //time7 ÖØDÂ×°ÔØμÄÖμ
TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //·ÖÆμÏμêy
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //ÏòéϼÆêy
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM7,&TIM_TimeBaseInitStructure); //3õê¼»ˉTIM7
NVIC_InitStructure.NVIC_IRQChannel=TIM7_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x03; //ÇàÕ¼óÅÏ輶
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03; //Ïìó|óÅÏ輶
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //ê1ÄüÖD¶Ï
NVIC_Init(&NVIC_InitStructure);
TIM_ITConfig(TIM7,TIM_IT_Update,ENABLE); //ÔêDí¶¨ê±Æ÷7¸üDÂÖD¶Ï
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);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>