电路板 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 */
}
|