[mw_shl_code=c,true] // 自动重装载寄存器的值,累计TIM_Period+1个频率后产生一个更新或者中断 即周期
TIM_TimeBaseStructure.TIM_Period = 65535; //周期
TIM_TimeBaseStructure.TIM_Prescaler= 35;// 时钟预分频数
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //时钟分割 默认0,这里忽略即可
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; //高级定时器选项,普通定时器忽略即可
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);// 初始化定时器3
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle; //选择定时器模式为翻转电平模式
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值
TIM_OCInitStructure.TIM_OCPolarity = TIM_CounterMode_Up; //输出极性:TIM输出比较极性高
TIM_OC3Init(TIM3, &TIM_OCInitStructure); //根据TIM_OCInitStruct中指定的参数初始化外设TIMx
TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Disable);//失能TIMx在CCR3上的预装载寄存器
TIM_Cmd(TIM3, ENABLE); //使能TIM3
TIM_ITConfig(TIM3, TIM_IT_CC3, ENABLE);
void TIM3_IRQHandler(void)
{
u16 Capture1;
if(TIM_GetITStatus(TIM3,TIM_IT_CC3)!=RESET)
{
TIM_ClearITPendingBit(TIM3, TIM_IT_CC3);//清除TIMx的中断待处理位
Capture1 = TIM_GetCapture3(TIM3);
TIM_SetCompare3(TIM3, Capture1 + 999);//设置TIMx自动重装载寄存器值
}
}
[/mw_shl_code]
产生PWM为啥是1khz而不是500hz
999不是1000us翻转一次吗,那一个周期不是2000us吗?。。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
TIM_TimeBaseStructure.TIM_Prescaler= 35;
计数周期=72m/36=2m
一个数=1/2m s 1000个=1/2000s=500us翻转一次 周期 1ms 1k?
应该是挂在apb1上面吧
是不是pdf有点问题啊,我还有本书,是挂在apb2上面。。
//TIM1、TIM8的时钟为APB2(72M)时钟即72M,TIM2~TIM7的时钟为APB1(36M)的时钟的两倍即72M TIM1~TIM8都是72M
记得手册有一句话 如果APB1预分频系数=1,则频率不变,否则频率*2
一周热门 更多>