不挂科搜题免费

问题:

【简答题】编程序,使用TIM1产生1s的定时。选用内部时钟源,假设PCLK2=90MHz

答案:

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; // 开启TIMx_CLK RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); /* 计数TIM_Period个后产生一个更新或者中断*/ //当定时器从0计数到9999,即为10000次,为一个定时周期 TIM_TimeBaseStructure.TIM_Period = 10000-1; //HCLK=SYSCLK=180MHz;APB1_CLK=HCLK/4;APB2_CLK=HCLK/2; // TIM1、TIM8以及TIM9-TIM11时钟源TIMxCLK = APB2_CLK*2=HCLK=180MHz // 请查阅F4数据手册P108 // 设定定时器频率为=TIMxCLK/(TIM_Prescaler+1)=10000Hz TIM_TimeBaseStructure.TIM_Prescaler = 18000-1; // 采样时钟分频 TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; // 计数方式 TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; // 重复计数方式 TIM_TimeBaseStructure. TIM_RepetitionCounter=0; // 初始化定时器TIM TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); // 清除定时器更新中断标志位 TIM_ClearFlag(TIM1, TIM_FLAG_Update); // 开启定时器更新中断 TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE); // 使能定时器 TIM_Cmd(TIM1, ENABLE);