• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

关于STM32定时器的几个疑惑

追梦少年 2017-08-19 浏览量:673

本人最近在研究STM32定时器的PWM输出以及输入捕获,其中产生了一些疑问,百度的答案不一致,恳请各位大神给一个权威的回复


1:使用基本定时器PWM输出时,STM32 的内部时钟树图得知当 APB1 的时钟分频数为 1 的时候, TIM2~7 的时钟为 APB1 的时钟,而如果 APB1 的时钟分频数不为 1,那么 TIM2~7 的时钟频率将为 APB1 时钟的两倍。    这里的时钟分频数指的是什么,如何去设置,是否为PSC的值?


2:使用基本定时器PWM输出时,如何计算输出PWM波形的占空比以及周期,希望能提供个简单例程来说明占空比如何设置。


3:使用基本定时器的输入比较时,​定时器何时开始启动,是边沿信号来临时定时器启动,还是一开始就启动了?


谢谢各位!



0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 1、分频数是指如STM32F103的72mhz的除数,分了多少份,分频数36那么时钟就是72÷36=2mhz

    设置见代码

    2、占空比和周期是由库函数或寄存器设定的,设置见代码

    3、你定时器初始化的时候就启动了

    代码:

    void TIM4_Int_Init(u16 arr,u16 psc)
    {
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    	NVIC_InitTypeDef NVIC_InitStructure;
    
    	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //时钟使能
    
    	TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值	 计数到5000为500ms
    	TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值  10Khz的计数频率  
    	TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
    	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
    	TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
     
    	TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断
    
    	NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;  //TIM4中断
    	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寄存器
    
    	TIM_Cmd(TIM4, ENABLE);  //使能TIMx外设
    							 
    }


    • 发布于 2017-09-07
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:1
  • 分频数不是倍频,是分频;PSC是用来设置分频的。例如系统时钟为72MHz,分频为71,那么定时器的频率就是1MHz。
    • 发布于2017-08-21
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

关于STM32定时器的几个疑惑