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 */
}
按键时间越长,显示时间的数字越大。
