IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32CubeMX——定时器输入捕获 -> 正文阅读

[嵌入式]STM32CubeMX——定时器输入捕获

基础知识

  1. 定时器是一种特殊的计数器,它对周期已知的脉冲信号进行计数,通过计数次数来算出计数时间。对于已知的脉冲信号(内部时钟信号),可以使用定时器模式,对于未知的脉冲信号(外部脉冲信号),只能使用计数器模式。
    在这里插入图片描述
  2. 定时器使用时关注的三个问题:位宽、计数值、处理。
  3. STM32定时器分类:
    基本定时器只能用于定时/计数。一般用作时基。通用定时器在基本定时器的基础上增加了一个外部引脚,可以实现输入捕获与输出比较等功能。传感器数据采集主要用通用定时器的输入捕获功能。高级定时器TIM1与TIM8相比于通用定时器增加了电机控制与数字电源设计相关的功能。
    在这里插入图片描述
  4. 输入捕获一般应用在两个方面,一个方面是计算脉冲跳变沿时间的方式测量脉宽与频率,另一方面是用 PWM 输入的方式测量脉宽与频率。
  5. 测周期是通过相邻两次中断计数值之差来换算的。那么两次进入中断要将计数值保存在两个不同的变量中,必然导致中断里面要有分支。
  6. 一个外设有几类功能,HAL库就给它定义了几种初始化数据类型来初始化结构体。
  7. GPIO成为简单外设。定时器之类的属于复杂外设。HAL库对于复杂外设在程序中的描述,有三种基本的设计方法:句柄设计——设计了统一的外设句柄数据类型PPP_ HandleTypeDef。编程模型——设计了轮询、中断、DMA三种编程模型。通用接口函数——设计了四类通用的接口函数。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  8. 时基单元分为:预分频模块、计数模块、自动重载模块。
    在这里插入图片描述

测量脉冲宽度或者测量频率流程

  1. 设置TIM2 CH1为输入捕获功能;
  2. 设置上升沿捕获;
  3. 使能TIM2 CH1捕获功能;
  4. 捕获到上升沿后,存入capture_buf[0],改为捕获下降沿;
  5. 捕获到下降沿后,存入capture_buf[1],改为捕获上升沿;
  6. 捕获到上升沿后,存入capture_buf[2],关闭TIM2 CH1捕获功能;
  7. 计算:capture_buf[2] - capture_buf[0]就是周期,capture_buf[1] - capture_buf[0]就是高电平所占时间。

代码实现

main.c
只写自己添加的代码

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include <stdio.h>
/* USER CODE END Includes */

/* USER CODE BEGIN PV */
uint32_t capture_Buf[3] = {0};   //存放三个关键节点的计数值
uint8_t capture_STA = 0;    //状态标志位
uint32_t time;   //周期
/* USER CODE END PV */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */
	
	//long long temp = 0;// 定义一个变量用以存储捕获到的时间 long long型是为了防止数据溢出
  /* USER CODE END 1 */

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

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

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

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

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_TIM2_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
  HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);//开启定时器2通道1的捕获中断  
  //__HAL_TIM_ENABLE_IT(&htim2,TIM_IT_UPDATE);  // 使能TIM2的更新中断
  
  printf("进入主函数\r\n");
  /* USER CODE END 2 */

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

	if(TIM2CH1_CAP_STA & 0X80)    // 捕获到一次高电平,会将TIM5CH1_CAPTURE_STA位7 置1,结果为1
	{
	  HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_9);
	  high_time = TIM2CH1_CAP_STA & 0X3F;
	  high_time *= 65536;            // 溢出总时间
	  high_time += TIM2CH1_CAP_VAL;	// 总的高电平时间
	  printf("一个周期的时间为%d us\r\n",high_time);
	  TIM2CH1_CAP_STA = 0;		// 将STA所有位清0,准备下一次捕获
	}
	  HAL_GPIO_WritePin(GPIOF, GPIO_PIN_10, GPIO_PIN_SET);
	  HAL_Delay(500);  
	  HAL_GPIO_WritePin(GPIOF, GPIO_PIN_10, GPIO_PIN_RESET);
	  HAL_Delay(500); 
	
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */

  }
  /* USER CODE END 3 */
}



  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-07-26 12:14:17  更:2021-07-26 12:14:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 18:53:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码