TIME3 使用的是原子的代码(只是将溢出的时间改为了1S),但是TIME1就是在上面修改的基本上没有改变什么,但是
TIME3的溢出时间就是1S 而TIME1的溢出时间变成了 60S ,使用的固件库,考虑到一个是在APB1 (TIME3) 另一个在APB2
(TIME1)上面,但是固件库好像将 系统和APB2是72MHz,APB1是36MHz 而根据
可以知道TIME3 的最初的频率就是36*2=72MHZ(没有算配置时候的预分频值,因为TIME1和TIME3的预分频值都是一样的)
而TIME1的频率就是72MHZ ,所以真心不知道是为什么???希望各路大神能够指教!!!!!谢谢,程序如下:
[mw_shl_code=c,true]void TIM3_Int_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能
//定时器TIM3初始化
TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断
//中断优先级NVIC设置
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级0级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //从优先级1级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
NVIC_Init(&NVIC_InitStructure); //初始化NVIC寄存器
TIM_Cmd(TIM3, ENABLE); //使能TIMx
}
//定时器3中断服务程序
void TIM3_IRQHandler(void) //TIM3中断
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx更新中断标志
time3_for_stop_mode_count++;
}
}
void TIM1_Int_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
TIM_TimeBaseStructure.TIM_Period = arr;
TIM_TimeBaseStructure.TIM_Prescaler =psc;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE );
NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_ClearITPendingBit(TIM1, TIM_FLAG_Update);
TIM_Cmd(TIM1, ENABLE);
}
void TIM1_UP_IRQHandler(void)
{
if (TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM1, TIM_IT_Update);
time1_for_test_count++;
}
}
int main(void)
{
NVIC_Configuration();
delay_init();
LED_Init();
// TIM3_Int_Init(9999,7199);
TIM1_Int_Init(9999,7199);
while(1)
{
if(time1_for_test_count>=1)
{
if(time1_for_test_count==1)
{
turn_on_all_led();
}
if(time1_for_test_count>=2)
{
time1_for_test_count=0;
turn_off_all_led();
}
}
if(time3_for_stop_mode_count>=1)
{
if(time3_for_stop_mode_count==1)
{
turn_on_all_led();
}
if(time3_for_stop_mode_count>=2)
{
time3_for_stop_mode_count=0;
turn_off_all_led();
}
}
}
}[/mw_shl_code]
希望指教谢谢!!!!!!!
|