本帖最后由 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
|