电路板 8M 晶振 pll后 系统时钟 72M
apb2 的时钟 RCC_PCLK2Config(RCC_HCLK_Div1);
所以 apb2 的频率 应该也是72M
InitTim1(1000,72,1); 得到的中断 频率是 2ms
将 apb2 的时钟 RCC_PCLK2Config(RCC_HCLK_Div2);
所以 apb2 的频率 应该也是36M
InitTim1(1000,72,1); 得到的中断 频率还是 2ms
将 apb2 的时钟 RCC_PCLK2Config(RCC_HCLK_Div4);
所以 apb2 的频率 应该也是18M
InitTim1(1000,72,1); 得到的中断 频率还是 4ms
是频率上不去吗 RCC_PCLK2Config(RCC_HCLK_Div1); 和 RCC_PCLK2Config(RCC_HCLK_Div2); 得到的结果是一样的
设置 tim1 定时中断 InitTim1(1000,72,1); 得到的中断频率是 2ms
- void InitTim1(INT16U pwm_period,INT16U prescaler,INT8U enIrq)
- {
- NVIC_InitTypeDef NVIC_InitStructure;
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //使能 TIMx 外设
- TIM_DeInit(TIM1);
- TIM_TimeBaseStructure.TIM_Period = pwm_period-1; //设置自动重装载周期值
- TIM_TimeBaseStructure.TIM_Prescaler =prescaler-1; //设置预分频值 不分频
- TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim 这里是 32M
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数
- TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
中断代码 如下:
- void TIM1_UP_IRQHandler (void)
- {
- static int cnt=0;
- OSIntEnter();
- TIM_ClearITPendingBit(TIM1, TIM_IT_Update);
- if(++cnt==1000)
- {
- cnt=0;
- OSQPost(OSQTim,(void*)1);
- }
- OSIntExit(); /* Tell uC/OS-II that we are leaving the ISR */
- }
|