STM32
直播中

徐生财

10年用户 845经验值
擅长:MEMS/传感技术
私信 关注
[问答]

STM32的定时器或外部中断该怎样去配置呢

STM32的定时器或外部中断该怎样去配置呢?定时器时间如何计算呢?

回帖(1)

李翰肃

2021-11-24 15:07:45
  对于一些基本操作可以参照第一篇的内容学习,几乎都是步骤图片,步骤内容都是在图里了。这个软件的学习主要分为基础的两三篇,然后转为RTOS的学习,毕竟是工具的使用,原理的东西虽然会涉及描述,但应该不会在这个系列里面太多。遇到困难的知识,我还会再次分类学习。
  本章学习一下配置定时器,或者外部中断,内容比较相近,就不分开讲述了,进入学习内容,重点请看图:
  1、开启定时器功能
  选择自己想要配置的定时器,如TIM1/TIM2/TIM3.。..,当然定时器有很多的模式,那个是定时计数模式?
  第一步:图中,mode板块里,第三个选项:Clock Source :选Internal Clock。这个就是定时计数模式了。
  
  2、定时计算
  定时器少不了的是预分频,计数周期了:实现精准的计数,一定要参照第一篇的时钟的配置,配置正确的时钟。
  第二步:在Configure模块::parameter settings -》 counter settings 里面的prescaler (PSC)预分频: 我配置的是72;counter period 计数周期:我配置的是10000;
  这个定时器时间如何算?
  公式:理论上是(预分频数-1) x(计数周期-1)/工作频率 ;换一个理解就是T=1/f * t;系统工作的时钟如72M、然后通过预分频72分频,得到10Khz;计数周期,就是以这个频率数到这个周期用的时间,如10kzh数到10000,就是1s。M的频率对应秒(s)的单位,khz对应的是us微秒;
  3、开启中断
  这里的开启中断也就是使能中断的意思。学习过第一篇的应该知道了。当然中断函数里面是没有内容的后面也是要自己在程序里面回调函数使用的。
  
  到这里,定时器已经配置完成了。剩下的步骤就是命名工程名字与配置编译工具,这个步骤和第一篇的内容一样,写好工程名,就可以生成工程了。下面打开进入工程讲解一下。
  4、工程函数配置,启动基础函数(使能)
  打开工程,为了好修改不删掉内容,建议在USER CODE BEGIN ****USER CODE END这里的区域内补充代码。
  在工程里面我们可以看到MX_GPIO_Init();这个是生成的配置了需要工作的参数,预分频数,自动重装载计数器的值
  在初始化这里,我们需要调用定时器的基础启动函数:HAL_TIM_Base_Start_IT(&htim3)这里我们使用的是TIM3。
  
  5、中断函数
  我们寻找stm32.。...it.c文件,里面是所有中断的路径,系统生成的中断函数当然也是在里面的。但是我们看到的就一个调用函数。
  void TIM3_IRQHandler(void)
  {
  /* USER CODE BEGIN TIM3_IRQn 0 */
  /* USER CODE END TIM3_IRQn 0 */
  HAL_TIM_IRQHandler(&htim3);
  /* USER CODE BEGIN TIM3_IRQn 1 */
  /* USER CODE END TIM3_IRQn 1 */
  }
  所以,中断内容是需要自己去回调使用的。这个回调放在main.c里面就行内容:
  int i=0;
  /* USER CODE BEGIN 4 */
  void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  {
  if(htim-》Instance == TIM3)
  {
  i++;
  if(i》=256)
  {
  i=0;
  }
  timer0[0]=i;
  // HAL_UART_Transmit(&huart1,(uint8_t *)timer0,1,0xFFFF);
  HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);
  }
  }
  
  到这里,定时器的配置已经完成。我配置的是串口输出。所以有一些不同。大家可以结合第一篇的内容实现IO口的翻转实现LED闪烁效果,验证一下。
举报

更多回帖

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