查看: 2288|回复: 0

23..STM32F469I---入门定时器使用

[复制链接]
  • TA的每日心情
    难过
    2021-2-27 22:16
  • 签到天数: 1568 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2018-1-12 16:32:00 | 显示全部楼层 |阅读模式
    分享到:
    【STM32F469I试用】入门(三):定时器使用【转】

    定时器的使用与硬件的关系 不太大,有关系也是一个GPIO的LED或是PWM。
    就以简单 的LED为例。
    先看一下定时器的初始化程序。
      TIM_HandleTypeDef    TimHandle;

      uwPrescalerValue = (uint32_t)((SystemCoreClock / 2) / 10000) - 1;

      /* Set TIMx instance */
      TimHandle.Instance = TIMx;//timer3

      /* Initialize TIMx peripheral as follows:
           + Period = 10000 - 1
           + Prescaler = ((SystemCoreClock / 2)/10000) - 1
           + ClockDivision = 0
           + Counter direction = Up
      */
      TimHandle.Init.Period            = 10000 - 1;//
      TimHandle.Init.Prescaler         = uwPrescalerValue;
      TimHandle.Init.ClockDivision     = 0;
      TimHandle.Init.CounterMode       = TIM_COUNTERMODE_UP;
      TimHandle.Init.RepetitionCounter = 0;
      if (HAL_TIM_Base_Init(&TimHandle) != HAL_OK)
      {
        /* Initialization Error */
        Error_Handler();//LED3ÁÁ
      }

      /*##-2- Start the TIM Base generation in interrupt mode ####################*/
      /* Start Channel1 */
      if (HAL_TIM_Base_Start_IT(&TimHandle) != HAL_OK)
      {
        /* Starting Error */
        Error_Handler();//LED3ÁÁ
      }

    一、定义定时器的句柄
    二、确定使用的定时器,定义 在main.h中
    #define TIMx                           TIM3

    三、计算周期与装载值
    四、设置时钟分频
    五、设置定时模式
    其他的定时模式还有
    #define TIM_COUNTERMODE_UP                 ((uint32_t)0x0000)
    #define TIM_COUNTERMODE_DOWN               TIM_CR1_DIR
    #define TIM_COUNTERMODE_CENTERALIGNED1     TIM_CR1_CMS_0
    #define TIM_COUNTERMODE_CENTERALIGNED2     TIM_CR1_CMS_1
    #define TIM_COUNTERMODE_CENTERALIGNED3     TIM_CR1_CMS

    六、使用函数HAL_TIM_Base_Init初始化定时器。
    其实HAL_TIM_Base_Init函数中到底是怎么初始化 的,对于想要马上上手的同学,是不用理会的。
    但是要是想深入学习,可以在stm32f4xx_hal_tim.c中找到对应的函数。

    1.jpg

    七、使能定时器
    函数HAL_TIM_Base_Start_IT。
    HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim)
    {
      /* Check the parameters */
      assert_param(IS_TIM_INSTANCE(htim->Instance));

      /* Enable the TIM Update interrupt */
      __HAL_TIM_ENABLE_IT(htim, TIM_IT_UPDATE);

      /* Enable the Peripheral */
      __HAL_TIM_ENABLE(htim);

      /* Return function status */
      return HAL_OK;
    }
    也可以看到还有一个函数是
    Error_Handler();
    它的作用就是在初始化或使能是出错后点亮LED3

    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-26 20:59 , Processed in 0.111368 second(s), 16 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.