STM32
直播中

靓仔峰

9年用户 1171经验值
擅长:可编程逻辑
私信 关注
[问答]

请问一下怎样去使用STM32L152芯片的基本定时器呢

请问一下怎样去使用STM32L152芯片的基本定时器呢?有哪些使用步骤呢?

回帖(1)

杨晓静

2021-11-24 10:48:33
  前言:
  最近在调试STM32L152芯片的定时器功能,本文总结下STM32L152芯片基本定时器的使用方法。
  硬件平台:STM32L152
  软件平台:keil v5+cubeMX
  函数库:HAL库
  基本定时器使用方法
  下面简单讲述一下STM32L152的定时器使用步骤。
  1.使用CubeMX对定时器进行配置,如定时器预分频值,计数值,定时器的触发方式等。
  2.下面详细解析相关的代码;
  TIM_HandleTypeDef htim3;
  void TIM3_Init(void)
  {
  TIM_ClockConfigTypeDef sClockSourceConfig;
  TIM_MasterConfigTypeDef sMasterConfig;
  htim3.Instance = TIM3;
  htim3.Init.Prescaler = 32000-1;//预分频值,本例使用外部8MHz,倍频后是32M,32000分频后为1kHz,预分频值为32000-1,计算公式为:CK_INT/(TIM_Perscaler+1)
  htim3.Init.CounterMode = TIM_COUNTERMODE_UP; //上升计数
  htim3.Init.Period = 1000-1;//计数值,1kHz即计数1000为1s,本例定时1s,计数值为1000-1
  htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  if (HAL_TIM_Base_Init(&htim3) != HAL_OK)
  {
  _Error_Handler(__FILE__, __LINE__);
  }
  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; //设置定时器时钟为内部时钟
  if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK)
  {
  _Error_Handler(__FILE__, __LINE__);
  }
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
  {
  _Error_Handler(__FILE__, __LINE__);
  }
  HAL_TIM_Base_Start(&htim3);//启动定时器
  HAL_TIM_Base_Start_IT(&htim3);//启动定时器中断
  }
  定时器的时钟使能和中断优先级在文件stm32l1xx_hal_msp.c中定义;
  void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
  {
  if(htim_base-》Instance==TIM3)
  {
  /* USER CODE BEGIN TIM3_MspInit 0 */
  /* USER CODE END TIM3_MspInit 0 */
  /* Peripheral clock enable */
  __HAL_RCC_TIM3_CLK_ENABLE();
  /* TIM3 interrupt Init */
  HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0);
  HAL_NVIC_EnableIRQ(TIM3_IRQn);
  /* USER CODE BEGIN TIM3_MspInit 1 */
  /* USER CODE END TIM3_MspInit 1 */
  }
  }
  下面是定时器的中断函数,定时时间到,标志位置位:
  void TIM3_IRQHandler(void)
  {
  HAL_TIM_IRQHandler(&htim3);
  TIM3_Flag=SET;
  }
  在主程序中添加自己定义的事情:
  while(1)
  {
  if(TIM3_Flag==SET)
  {
  TIM3_Flag=0;//清除标志
  //添加自己定义的代码
  }
  }
举报

更多回帖

发帖
×
20
完善资料,
赚取积分