HAL STM32定时器(TIM)编码器模式驱动EC11

HAL STM32定时器(TIM)编码器模式驱动EC11


  • 📍相关篇《HAL STM32+EC11编码器实现增减调节及单击、双击、长按功能
  • ✨不仅仅针对驱动EC11编码器,符合相关 脉冲信号输出的编码器也是支持的。
  • 📜本文仅针对编码器计数和方向识别功能做测试。没有涉及对动态的信息(速度,加速度,减速度)的检测。如需检测动态的信息,还需要引入另外的定时器或通道,做输入捕获。(具体可以参考stm32参考手册中高级定时器相关内容:霍尔传感器接口的实例
  • 🔖定时器(TIM)编码器功能,一般只有高级定时器或者通用定时器才有此功能。需要同时占用2个通道。
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

  • 🌿EC11外围电路:(这里没有涉及到中键按键功能)
    在这里插入图片描述

  • 📜对于stm32f030相对于的编码器的库函数:
    在这里插入图片描述

  • 📑编码器数据读取相关函数

  • 🌿 __HAL_TIM_IS_TIM_COUNTING_DOWN:可以获得当前编码器的转向 0为正转、1为反转;

  • 🌿__HAL_TIM_GET_COUNTER :获取计数器的计数值,即编码器的脉冲数。

🛠STM32CubeMX配置

  • 🌿选择一个带编码器功能的定时器。(只需选择编码器模式,上面的时钟源以及触发模式都不要使能)
    在这里插入图片描述

  • 🌿如果没有什么要求,参数全部默认即可.(这里统一采集上升沿信号)
    在这里插入图片描述

对于使用STM32定时器编码器,你可以使用HAL库来进行编程。下面是一个示例代码,演示了如何设置定时器编码器。 首先,你需要初始化定时器编码器。假设你要使用的是TIM3定时器编码器模式。以下是初始化代码: ```c // 定义定时器编码器句柄 TIM_HandleTypeDef htim3; // 初始化定时器编码器 void TIM_Encoder_Init(void) { // 使能定时器时钟 __HAL_RCC_TIM3_CLK_ENABLE(); // 配置定时器参数 htim3.Instance = TIM3; htim3.Init.Prescaler = 0; htim3.Init.CounterMode = TIM_COUNTERMODE_UP; htim3.Init.Period = 65535; htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; // 初始化定时器 HAL_TIM_Encoder_Init(&htim3, TIM_ENCODERMODE_TI1); // 启动定时器 HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL); } ``` 上述代码中,我们首先使能了定时器的时钟,并配置了定时器的参数。然后,我们使用`HAL_TIM_Encoder_Init()`函数来初始化定时器编码器,并使用`TIM_ENCODERMODE_TI1`模式来设置编码器模式。最后,使用`HAL_TIM_Encoder_Start()`函数启动定时器编码器。 接下来,你可以使用以下代码来读取编码器的值: ```c int32_t Get_Encoder_Value(void) { return (int32_t)htim3.Instance->CNT; } ``` 以上代码通过读取定时器的计数器值来获取编码器的值。你可以在需要的地方调用`Get_Encoder_Value()`函数来获取编码器的当前值。 这是一个简单的示例代码,演示了如何在STM32上使用HAL库进行定时器编码器编程。你可以根据自己的需求进行相应的修改和扩展。希望对你有帮助!
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值