STM32CubeMX配置HAL库输入捕获

STM32CubeMX配置HAL库输入捕获

STM32的输入捕获功能可以用来测量脉冲宽度或者频率。其工作原理是,通过检测TIMx_CHx上的边沿信号,在边沿信号发生跳变(比如

上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT)存放到对应的通道的捕获/比较寄存器(TIMx_CCRx)里面,完成一次捕获。

硬件

  • STM32F407IGT6
  • Stlink
  • USB-TTL

软件

  • STM32CubeMX
  • CLion

配置

  • RCC->High Speed Clock (HSE)-> Crystal/Ceramic Resonator

  • SYS->Debug->Serial Wire

  • Clock Configuration -> HCLK->84

  • 设置PWM->TIM3

image-20231222170505554

  • 设置输入捕获->TIM2 适当设置滤波器 打开NVIC中断

默认输入捕获通道可以设置低电平,上升沿触发

image-20231222170712990

编写程序

初始化变量(全局)

uint32_t capture_left_Buf[3] = {0};   //左电机存放计数值
uint32_t capture_right_Buf[3] = {0};   //右存放计数值
uint8_t capture_left_Cnt = 0;    //左电机状态标志位
uint8_t capture_right_Cnt = 0;   //右电机状态标志位
uint32_t left_time, right_time;   //周期时间
uint32_t left_speed, right_speed; //电机速度

中断服务函数

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)// 捕获中断发生时执行
{if(htim->Instance == TIM2){if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1){switch(capture_left_Cnt){case 1:capture_left_Buf[0] = HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_1);//获取当前的捕获值
//                __HAL_TIM_SET_CAPTUREPOLARITY(&htim2,TIM_CHANNEL_1,TIM_INPUTCHANNELPOLARITY_RISING);  //设置为下降沿捕获capture_left_Cnt++;break;case 2:capture_left_Buf[1] = HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_1);//获取当前的捕获值.
//                capture_Num = capture_flag;
//                capture_flag = 0;HAL_TIM_IC_Stop_IT(&htim2,TIM_CHANNEL_1); //停止捕获   或者: __HAL_TIM_DISABLE(&htim2);capture_left_Cnt++;}}if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2){switch(capture_right_Cnt){case 1:capture_right_Buf[0] = HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_2);//获取当前的捕获值capture_right_Cnt++;break;case 2:capture_right_Buf[1] = HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_2);//获取当前的捕获值.HAL_TIM_IC_Stop_IT(&htim2,TIM_CHANNEL_2); //停止捕获   或者: __HAL_TIM_DISABLE(&htim2);capture_right_Cnt++;}}}
}

主函数

  HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2);HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);  //开启TIM2的捕获通道1HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_2);  //开启TIM2的捕获通道2__HAL_TIM_ENABLE_IT(&htim2,TIM_IT_UPDATE);  //使能更新中断/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */Load_PWM(500, 500);switch (capture_left_Cnt){case 0:capture_left_Cnt++;__HAL_TIM_SET_CAPTUREPOLARITY(&htim2, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_RISING);HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1);	//启动输入捕获       或者: __HAL_TIM_ENABLE(&htim2);break;case 3:left_time = capture_left_Buf[1]- capture_left_Buf[0];    //周期capture_left_Cnt = 0;  //清空标志位break;}switch (capture_right_Cnt){case 0:capture_right_Cnt++;__HAL_TIM_SET_CAPTUREPOLARITY(&htim2, TIM_CHANNEL_2, TIM_INPUTCHANNELPOLARITY_RISING);HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_2);	//启动输入捕获       或者: __HAL_TIM_ENABLE(&htim2);break;case 3:right_time = capture_right_Buf[1]- capture_right_Buf[0];    //周期capture_right_Cnt = 0;  //清空标志位break;}printf("{\"left_time\":%d,\"right_time\":%d} \r\n",left_time, right_time);HAL_Delay(1000);}

演示

用杜邦线连接PA6->PA0 PA7->PA1

PWM脉冲 84M/168/1000 = 500Hz 1/500Hz = 20ms = 200us

(之前的截图没设置滤波器,配置都一样)

image-20231222190002435

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/293071.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue开发实践:解决Chrome浏览器禁止通过代码关闭窗口的问题

前言 在开发 Electron 桌面端应用时,软件有一个退出软件的按钮,用于关闭应用程序。然而,在实现这一功能的过程中,我们可能会遇到一些问题。本文将探讨这个问题,并给出解决方案。 实现 询问负责 Electron 的同学…

智能变电站协议系列-1、GOOSE、SV、MMS协议简介及GOOSE示例运行问题(IEC61850)

文章目录 一、前言二、资料准备三、智能变电站自动化系统架构四、GOOSE、MMS、SV协议以及其他协议1、GOOSE(通用面向对象变电站事件)协议2、MMS(制造消息规范)协议3、采样值 (SV) 协议4、数字化变电站中使用的其他协议遗留协议 五…

智能算力进阶C位,揭秘人工智能产业背后的“冰山一角”

作者 | 曾响铃 文 | 响铃说 前几年,在IDC领域,市场谈及最多的还是数据中心,随着人工智能产业的成熟,特别是今年以来大模型的爆发,智算中心逐步替代了数据中心进入大众视野,成为市场热议的关键词&#xff…

java-多线程

程序,进程,线程 【1】程序,进程,线程 ➢程序(program):是为完成特定任务、用某种语言编写的一组指令的集合,是一段静态的代码。 (程序是静态的) ➢进程(process):是程序的一次执行…

VGGNet

目录 一、VGGNet介绍 1、VGG块 2、VGG架构 3、LeNet, AlexNet和VGGNet对比 4、总结 二、代码实现 1、定义VGG卷积块 2、VGG网络 3、训练模型 4、总结 一、VGGNet介绍 VGGNet(Visual Geometry Group Network)是一种深度卷积神经网络,…

RocketMQ系统性学习-RocketMQ高级特性之消息大量堆积处理、部署架构和高可用机制

🌈🌈🌈🌈🌈🌈🌈🌈 【11来了】文章导读地址:点击查看文章导读! 🍁🍁🍁🍁🍁🍁&#x1f3…

恶意软件样本行为分析——Process Monitor和Wireshark

1.1 实验名称 恶意软件样本行为分析 1.2 实验目的 1) 熟悉 Process Monitor 的使用 2) 熟悉抓包工具 Wireshark 的使用 3) VMware 的熟悉和使用 4) 灰鸽子木马的行为分析 1.3 实验步骤及内容 第一阶段:熟悉 Process Monitor 的使用 利用 Process …

职场利器-软考高级、PMP、CKA/CKS/CKAD备考

1、【软考高级】信息系统项目管理师 全国计算机技术与软件专业技术资格(水平)考试网上报名平台http://bm.ruankao.org.cn/sign/welcome 模拟作答系统230747 第一次裸考 考试成绩查询 三科均未通过 软考考试多少分通过? ​​​​​​​ 软考高级,它的考试科目是《…

金蝶云星空执行部署包后业务对象会被标记上部署包的开发码

文章目录 金蝶云星空执行部署包后业务对象会被标记上部署包的开发码 金蝶云星空执行部署包后业务对象会被标记上部署包的开发码 会被标记成开发码的业务对象包括以下: 新增的业务对象,扩展的业务对象 --查询二开的元数据打包 FPACKAGEID不为空&#xff…

集合论:二元关系(1)

集合论这一章内容很多,重点是二元关系中关系矩阵,关系图和关系性质:自反、反自反、对称、反对称、传递以及关系闭包的运算,等价关系,偏序关系,哈斯图,真吓人! 1.笛卡儿积 由两个元素x和y按照一…

Midjourney V6版本强势来袭,挑战像素极限!

最新的Midjourney V6模型带来了一系列强大的功能和改进,以下是一些关键特性的总结: AI提示词(第33辑)Midjourney V6版本强势来袭,挑战像素极限!-喜好儿aigc 目前测试已发现: 提示词长度已增至…

安卓好用的python编辑器,安卓平台python编辑器

本篇文章给大家谈谈安卓上好用的python编辑软件有哪些,以及安卓上好用的python编辑软件推荐,希望对各位有所帮助,不要忘了收藏本站喔。 1. 简介 Thonny是基于python内置图形库tkinter开发出来的支持多平台(windows,Mac,Linux)的python IDE&am…