【STM32】HAL库 STM32CubeMX教程八---定时器输入捕获_cubemx 捕获

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

④记录此时的TIMx_CN(计数器)T的值

⑤前后两次TIMx_CNT(计数器)的值之差就是高电平的脉宽。同时根据TIM的计数频率,我们就能知道高电平脉宽的准确时间。

简单说:

当你设置的捕获开始的时候,cpu会将计数寄存器的值复制到捕获比较寄存器中并开始计数,当再次捕捉到电平变化时,这是计数寄存器中的值减去刚才复制的值就是这段电平的持续时间,你可以设置上升沿捕获、下降沿捕获、或者上升沿下降沿都捕获,

输入捕获的工作流程(对应CubeMx的四个选项)

设置输入捕获滤波器

STM32在很多功能中都提供了滤波器,滤波器的功能简单来说就是多次

STM32 HAL是ST公司提供的一套硬件抽象层,用于简化STM32微控制器的开发。定时器输入捕获定时器的一个重要功能,可以用来测量输入信号的脉宽、频率等参数。通过CubeMX工具,可以方便地配置定时器输入捕获功能。 以下是使用STM32 HALCubeMX配置定时器输入捕获的步骤: 1. **打开CubeMX并创建新项目**: - 打开CubeMX,选择“New Project”。 - 在“Clock Configuration”选项卡中,配置系统时钟和定时器时钟,确保定时器时钟符合你的需求。 3. **配置定时器**: - 在“Pinout & Configuration”选项卡中,选择一个定时器(例如TIM2)。 -定时器配置中,启用“Channel 1”的“Input Capture Direct Mode”。 - 配置输入捕获的极性(上升沿、下降沿或双边沿)和滤波器(如果需要)。 4. **生成代码**: - 点击“Project”->“Settings”,配置项目名称、保存路径和工具链。 - 点击“Generate Code”生成初始化代码。 5. **编写应用代码**: - 在生成的代码基础上,编写定时器输入捕获的中断处理函数。 - 使用HAL提供的函数来启动输入捕获和中断。 以下是一个简单的示例代码,展示了如何配置和使用定时器输入捕获: ```c #include "main.h" TIM_HandleTypeDef htim2; void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_TIM2_Init(void); int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_TIM2_Init(); HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1); while (1) { } } void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) { if (htim->Instance == TIM2) { if (HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1) != 0) { uint32_t capture = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1); // 处理捕获值 } } } static void MX_TIM2_Init(void) { TIM_IC_InitTypeDef sConfigIC = {0}; htim2.Instance = TIM2; htim2.Init.Prescaler = 0; htim2.Init.CounterMode = TIM_COUNTERMODE_UP; htim2.Init.Period = 0xFFFFFFFF; htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; if (HAL_TIM_IC_Init(&htim2) != HAL_OK) { // 初始化错误处理 } sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING; sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI; sConfigIC.ICPrescaler = TIM_ICPSC_DIV1; sConfigIC.ICFilter = 0; if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_1) != HAL_OK) { // 配置错误处理 } } static void MX_GPIO_Init(void) { __HAL_RCC_GPIOA_CLK_ENABLE(); // 其他GPIO初始化代码 } void SystemClock_Config(void) { // 系统时钟配置代码 } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值