STM32开发板学习笔记【6】TIM 输入捕获

实验目的

通过定时器,我们能够实现捕获引脚上的高低电平脉冲宽度或者测量频率等功能,通过本章的学习, 对定时器有了一个更全面的认识与理解。在这里介绍了通用定时器 T1M1 作为输入捕获的使用,使用串口 显示相关数据。

编写程序,实现定时器记录按键低电平时间。并打印在串口里。

脉冲宽度捕获原理

CNT 计数器

捕获/比较模式寄存器 1:TIMx_CCMR1,这个寄存器在输入捕获的时候,非常有用,有必要 重新介绍,该寄存器的各位描述如图所示:

当在输入捕获模式下使用的时候,对应上图的第二行描述,从图中可以看出,TIMx_CCMR1明显是针 对2个通道的配置,低八位[7:0]用于捕获/比较通道1的控制,而高八位[15:8]则用于捕获/比较通道2的控 制,因为TIMx还有CCMR2这个寄存器,所以可以知道CCMR2是用来控制通道3和通道4(详见《STM32F4xx 中文参考手册》435页,15.4.8节)。 这里我们用到的是 TIM2 的捕获/比较通道 1,我们重点介绍 TIMx_CCMR1 的[7:0]位(其高 8 位配置 类似)

STM32Cube 配置如下:

进入 Configuration->TIM2 配置页,在弹出的界面中点击 Parameter Settings 选项卡,Counter

Settings 配置栏下面的四个选项就是用来配置定时器的预分频系数,自动装载值,计数模式以及时钟分频

因子。在界面的 Input Capture Channel 1 配置栏配置输入捕获通道 1 的捕获极性,分频系数,映射,滤波 器等参数

点击 CLOCK CONFIGURATION 对时钟进行设置

main.c

int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_TIM2_Init();

  /* USER CODE BEGIN 2 */
  HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);  //¿ªÆôTIM2µÄ²¶»ñͨµÀ1 £¬²¢ÇÒ¿ªÆô²¶»ñÖжÏ
	__HAL_TIM_ENABLE_IT(&htim2,TIM_IT_UPDATE);  //ʹÄܸüÐÂÖжÏ
	printf("

========================================

");
	printf("

 FS-STM32F407IGT¿ª·¢°å ÊäÈë²¶»ñʵÑé 

");
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
   if(TIM2CH1_CAPTURE_STA&0X80){//³É¹¦²¶»ñµ½Ò»´Î¸ßµçƽ
		 temp=TIM2CH1_CAPTURE_STA&0X3F;
		 temp*=0XFFFFFFFF;
		 temp+=TIM2CH1_CAPTURE_VAL; //µÃµ½×ÜµÄ¸ßµçÆ½Ê±¼ä
		 printf("LOW:%lld us
",temp); //´òÓ¡×ÜµÄ¸ßµçÆ½Ê±¼ä
		 TIM2CH1_CAPTURE_STA=0;
	 }
  }
  /* USER CODE END 3 */

}

按键时间越长,显示时间的数字越大。

经验分享 程序员 微信小程序 职场和发展