• 基于STM32CubeMX的定时器设置


    一 概述

    STM32的常见的定时器资源: 系统嘀嗒定时器SysTick、看门狗定时器WatchDog、实时时钟RTC、基本定时器、通用定时器、高级定时器。

    系统嘀嗒定时器SysTick :这是一个集成在Cortex M3内核当中的定时器,它并不属于芯片厂商的外设,也就是说使用ARM内核的不同厂商,都拥有基本结构相同的系统定时器。主要目的是给RTOS提供时钟节拍做时间基准。
    基本定时器:TIM6、TIM7。
    通用定时器:TIM2、TIM3、TIM4、TIM5。在基本定时器的基础上,实现输出比较、输入捕获、PWM生成、单脉冲模式输出等功能。这类定时器最具代表性,使用也最广泛。
    高级定时器:TIM1、TIM8。

    二 STM32通用定时器的基本组成:

    STM32的通用定时器,是一个通过可编程预分频器(Prescaler)驱动的16位自动重装主计数器(Counter Period)构成。可以对内部时钟或触发源以及外部时钟或触发源进行计数。
    首先,定时器时钟信号送入16位可编程预分配器(Prescaler),该预分配器系数为0~65535之间的任意数值。预分配器溢出后,会向16位的主计数器(Counter Period)发出一个脉冲信号。
    预分频器,本质上是一个加法计数器,预分频系数实际上就是加计数的溢出值。
    定时器发生中断时间的计算方法:
    定时时间 = (可编程预分频器+1 ) X (主计数器+1) X 1/ 定时器时钟频率
    例:假设时钟信号为1KHz,可编程预分频器系数为9,主计数器系数为9。此时定时器为0.1秒

    我们用一个例子来讲解:利用TIM2实现间隔定时,每隔0.2秒将LED1(PB9)的开关状态翻转。(时钟信号为32MHZ)

    第一步:首先设置clock时钟源为32MHZ:

    第二步在Timers的选项里找到TIM2,对定时器2进行设置,然后设置可编程预分频器和主计数器的系数:

    设置Prescaler=31999,Counter Period=199。

    此时 (31999+1 ) X (199+1) X 1/ 32MHZ =0.2s,正好定时0.2秒。

     此时要注意设置NVIC:

     点击Enabled。设置NVIC嵌套向量中断控制器。

    设置好路径等其他内容,用Keil打开工程文件。

    在主函数启动定时器:

       HAL_TIM_Base_Start_IT(&htim2);        //启动定时器TIM2

    写出TIM2实现定时器溢出的回调函数:

     

    void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
    {
       if(htim->Instance == TIM2)                  //处理TIM2间隔定时中断
       {
             AL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);     //对PB9端口进行翻转
       }
    }
    博客园
  • 相关阅读:
    Qt编写控件属性设计器12-用户属性
    C#中通过三边长判断三角形类型(三角形测试用例)
    C#中通过Selenium定位<a>标签的问题
    SharePoint自动化系列——Manage "Site Subscriptions" using PowerShell
    SharePoint API测试系列——Records.BypassLocks测试
    SharePoint API测试系列——对Recorded Item做OM操作(委托的妙用)
    放松时刻——C#分割字符串
    链表——PowerShell版
    栈——PowerShell版
    队列——PowerShell版
  • 原文地址:https://www.cnblogs.com/wang-zefeng/p/12976193.html
Copyright © 2020-2023  润新知