Mini开发板定时器1的时钟频率是APB2,而APB2的时钟不是72M吗。下面程序是我的配置,把参数改为Tim2或者Tim3后LED每0.5S闪烁一次。但是下面的程序是Tim1,LEd的闪烁时间大概是3S闪烁一次,不是应该也是0.5S闪烁一次吗?(注:程序可以正常运行,但是LED的闪烁时间不对)
int main(void)
{
SystemInit();
uart_init(9600);
delay_init(72);
NVIC_Configuration();
LED_Init();
TIM1_Init(4999, 7199);
while (1);
}
void TIM1_Init(u16 arr, u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
// NVIC_InitTypeDef NVIC_InitStructure;
/*使能TIM2时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
// NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //选择组1
// NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn; //TIM2中断
// NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级0级
// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级3级
// NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
// NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
MY_NVIC_Init(0, 3, TIM1_UP_IRQn);
/*自动重装载值5000*/
TIM_TimeBaseStructure.TIM_Period = arr;
/*预分频值,+1为分频系数*/
TIM_TimeBaseStructure.TIM_Prescaler =psc;
// TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
/*TIM向上计数模式*/
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
/*根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位*/
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
/*使能TIM2中断源*/
TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);
/*使能TIMx外设*/
TIM_Cmd(TIM1, ENABLE);
}
void TIM1_UP_IRQHandler(void) //注意定时器1中断入口函数名
{
if ( TIM_GetITStatus(TIM1 , TIM_IT_Update) != RESET ) //是否发生中断
{
TIM_ClearITPendingBit(TIM1, TIM_FLAG_Update); //清除中断待处理位
LED0 = !LED0; //用于测试
}
} |