本帖最后由 jinyi7016 于 2015-12-29 15:30 编辑
定时器的使用与硬件的关系 不太大,有关系也是一个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 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中找到对应的函数。
七、使能定时器
函数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
|