[STM32F4] 【STM32F469I试用】入门(三):定时器使用

[复制链接]
2089|3
 楼主| jinyi7016 发表于 2015-12-29 15:29 | 显示全部楼层 |阅读模式
本帖最后由 jinyi7016 于 2015-12-29 15:30 编辑

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

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

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

  5.   /* Initialize TIMx peripheral as follows:
  6.        + Period = 10000 - 1
  7.        + Prescaler = ((SystemCoreClock / 2)/10000) - 1
  8.        + ClockDivision = 0
  9.        + Counter direction = Up
  10.   */
  11.   TimHandle.Init.Period            = 10000 - 1;//
  12.   TimHandle.Init.Prescaler         = uwPrescalerValue;
  13.   TimHandle.Init.ClockDivision     = 0;
  14.   TimHandle.Init.CounterMode       = TIM_COUNTERMODE_UP;
  15.   TimHandle.Init.RepetitionCounter = 0;
  16.   if (HAL_TIM_Base_Init(&TimHandle) != HAL_OK)
  17.   {
  18.     /* Initialization Error */
  19.     Error_Handler();//LED3ÁÁ
  20.   }

  21.   /*##-2- Start the TIM Base generation in interrupt mode ####################*/
  22.   /* Start Channel1 */
  23.   if (HAL_TIM_Base_Start_IT(&TimHandle) != HAL_OK)
  24.   {
  25.     /* Starting Error */
  26.     Error_Handler();//LED3ÁÁ
  27.   }

一、定义定时器的句柄
二、确定使用的定时器,定义 在main.h中
  1. #define TIMx                           TIM3
三、计算周期与装载值
四、设置时钟分频
五、设置定时模式
其他的定时模式还有
  1. #define TIM_COUNTERMODE_UP                 ((uint32_t)0x0000)
  2. #define TIM_COUNTERMODE_DOWN               TIM_CR1_DIR
  3. #define TIM_COUNTERMODE_CENTERALIGNED1     TIM_CR1_CMS_0
  4. #define TIM_COUNTERMODE_CENTERALIGNED2     TIM_CR1_CMS_1
  5. #define TIM_COUNTERMODE_CENTERALIGNED3     TIM_CR1_CMS
六、使用函数HAL_TIM_Base_Init初始化定时器。
其实HAL_TIM_Base_Init函数中到底是怎么初始化 的,对于想要马上上手的同学,是不用理会的。
但是要是想深入学习,可以在stm32f4xx_hal_tim.c中找到对应的函数。
捕获.PNG
七、使能定时器
函数HAL_TIM_Base_Start_IT。
  1. HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim)
  2. {
  3.   /* Check the parameters */
  4.   assert_param(IS_TIM_INSTANCE(htim->Instance));
  5.   
  6.   /* Enable the TIM Update interrupt */
  7.   __HAL_TIM_ENABLE_IT(htim, TIM_IT_UPDATE);
  8.       
  9.   /* Enable the Peripheral */
  10.   __HAL_TIM_ENABLE(htim);
  11.       
  12.   /* Return function status */
  13.   return HAL_OK;
  14. }

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




秋风式街球 发表于 2015-12-31 15:25 | 显示全部楼层
秋风式街球 发表于 2015-12-31 15:27 | 显示全部楼层
楼主很强大哦  谢谢热心分享   能不能把每个分享帖的源代码附上啊  谢啦
zhuotuzi 发表于 2015-12-31 17:34 | 显示全部楼层
有部分头文件注释的很清楚,有部分不行,估计不同模块是不同人写的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

148

主题

1414

帖子

12

粉丝
快速回复 在线客服 返回列表 返回顶部