STM32定时器的编码器接口模式
MCU为STM32L431,通用定时器框图:

编码器接口模式一共有三种,通过TIMx_SMCR寄存器的SMS[3:0]位来选择。模式1计数器仅在TI1FP1的边沿根据TI2FP2的电平来判断向上/下计数;模式2计数器仅在TI2FP2的边沿根据TI1FP1的电平来判断向上/下计数;模式3计数器同时在TI1FP1和TI2FP2的边沿根据另外一条线的电平来判断向上/下计数。
计数方向与编码器信号的关系:

使用编码器模式3,假如使用如下配置时,

IC1FP1和IC2FP2不反相,IC1FP1=TI1,IC2FP2=TI2;TI1FP1相对信号是TI2,TI2FP2相对信号是TI1,对应关系如下:
| 向前 | 点位 | TI1FP1信号 | TI2FP2信号 | 相对信号及电平 | 计数器方向 |
|---|---|---|---|---|---|
| 1 | 上升 | TI2(低) | 向上 | ||
| 2 | 上升 | TI1(高) | 向上 | ||
| 3 | 下降 | TI2(高) | 向上 | ||
| 4 | 下降 | TI1(低) | 向上 | ||
| 5 | 上升 | TI2(低) | 向上 | ||
| 6 | 上升 | TI1(高) | 向上 | ||
| 向后 | 点位 | TI1FP1信号 | TI2FP2信号 | 相对信号及电平 | 计数器方向 |
| 1 | 上升 | TI2(高) | 向下 | ||
| 2 | 下降 | TI1(高) | 向下 | ||
| 3 | 下降 | TI2(低) | 向下 | ||
| 4 | 上升 | TI1(低) | 向下 | ||
| 5 | 上升 | TI2(高) | 向下 | ||
| 6 | 下降 | TI1(高) | 向下 |

同样使用编码器模式3,当IC1FP1极性反相时计数器的操作实例(CC1P=’1’,其他配置与上例相同),TI1极性相反,IC2FP2=TI2;TI1FP1相对信号是TI2,TI2FP2相对信号是TI1,对应关系如下:
| 向前 | 点位 | TI1原信号 | TI1FP1信号 | TI2FP2信号 | 相对信号及电平 | 计数器方向 |
|---|---|---|---|---|---|---|
| 1 | 上升 | 下降 | TI2(低) | 向下 | ||
| 2 | 上升 | TI1(低) | 向下 | |||
| 3 | 下降 | 上升 | TI2(高) | 向下 | ||
| 4 | 下降 | TI1(高) | 向下 | |||
| 5 | 上升 | 下降 | TI2(低) | 向下 | ||
| 6 | 上升 | TI1(低) | 向下 | |||
| 向前 | 点位 | TI1原信号 | TI1FP1信号 | TI2FP2信号 | 相对信号及电平 | 计数器方向 |
| 1 | 上升 | 下降 | TI2(高) | 向上 | ||
| 2 | 下降 | TI1(低) | 向上 | |||
| 3 | 下降 | 上升 | TI2(低) | 向上 | ||
| 4 | 上升 | TI1(高) | 向上 | |||
| 5 | 上升 | 下降 | TI2(高) | 向上 | ||
| 6 | 下降 | TI1(低) | 向上 |

如果使用编码器模式1,IC1FP1和IC2FP2不反相,IC1FP1=TI1,IC2FP2=TI2;TI1FP1相对信号是TI2,TI2FP2相对信号是TI1,计数器在TI1FP1的边沿根据IC2FP2的电平来计数。
| 向前 | 点位 | TI1FP1信号 | 相对信号及电平 | 计数器方向 |
|---|---|---|---|---|
| 1 | 上升 | TI2(低) | 向上 | |
| 2 | 下降 | TI2(高) | 向上 | |
| 3 | 上升 | TI2(低) | 向上 | |
| 4 | 下降 | TI2(高) | 向上 | |
| 向后 | 点位 | TI1FP1信号 | 相对信号及电平 | 计数器方向 |
| 1 | 上升 | TI2(高) | 向下 | |
| 2 | 下降 | TI2(低) | 向下 | |
| 3 | 上升 | TI2(高) | 向下 | |
| 4 | 下降 | TI2(低) | 向下 |

定时器编码器模式配置:
void Encoder_TIM2_Init(void)
{TIM_Encoder_InitTypeDef sConfig = {0};TIM_MasterConfigTypeDef sMasterConfig = {0};htim2.Instance = TIM2;htim2.Init.Prescaler = 0;htim2.Init.CounterMode = TIM_COUNTERMODE_UP;htim2.Init.Period = (ENCODER_RELOAD_NUM - 1);htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;sConfig.EncoderMode = TIM_ENCODERMODE_TI1;sConfig.IC1Polarity = TIM_ICPOLARITY_RISING;sConfig.IC1Selection = TIM_ICSELECTION_DIRECTTI;sConfig.IC1Prescaler = TIM_ICPSC_DIV1;sConfig.IC1Filter = 0;sConfig.IC2Polarity = TIM_ICPOLARITY_RISING;sConfig.IC2Selection = TIM_ICSELECTION_DIRECTTI;sConfig.IC2Prescaler = TIM_ICPSC_DIV1;sConfig.IC2Filter = 0;if (HAL_TIM_Encoder_Init(&htim2, &sConfig) != HAL_OK){PRINT_ERR("Encoder Tim Init Err\r\n");}sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK){PRINT_ERR("Encoder Init Mode Err\r\n");}HAL_TIM_Encoder_Start(&htim2,TIM_CHANNEL_ALL);
}
其中htim2.Init.Period的值为重装载值,计数器的计数值在0(包含)至Period(包含)之间向上或向下计数,可以通过计数值的变化根据编码器接口的模式来判断编码器的方向,也可以TIMx_CR1寄存器的DIR位来判断方向。如果不需要判断编码器转过的圈数,那么重装载值可以顺便设置,比如65535;如果需要判断转过的圈数,假定使用模式3,编码器旋转一周产生的脉冲数是X,那么重装载值可以设置为(X-1)*4,因为模式3在TI1和TI2的边沿都计数,此时可以通过定时器的溢出中断来判断是不是旋转一周。
如果只需要判断旋转方向,并且编码器旋转一周的产生的脉冲数很小的话,那就使用模式1或者模式2比较好,如果使用模式3的话仅通过TIMx_CNT寄存器的值来计算转过角度的话误差比较大。
另外配置的时候编码器模式IC1Polarity和IC2Polarity的极性只能选择上升沿或者下降沿,不能设置为所有边沿,这样的话会导致计数器计数失败,并且方向判断也会有问题。

相关文章:
STM32定时器的编码器接口模式
MCU为STM32L431,通用定时器框图: 编码器接口模式一共有三种,通过TIMx_SMCR寄存器的SMS[3:0]位来选择。模式1计数器仅在TI1FP1的边沿根据TI2FP2的电平来判断向上/下计数;模式2计数器仅在TI2FP2的边沿根据TI1FP1的电平来判断向上/下…...
Java方法的使用
目录 一、方法的概念及使用 1、什么是方法(method) 2、方法定义 3、方法调用的执行过程 4、实参和形参的关系 二、方法重载 1、为什么需要方法重载 2、方法重载概念 3、方法签名 三、递归 1、递归的概念 2、递归执行过程分析 一、方法的概念及使用 1、什么是方法(met…...
Linux命令·nl
nl命令在linux系统中用来计算文件中行号。nl 可以将输出的文件内容自动的加上行号!其默认的结果与 cat -n 有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐 0 等等的功能。 1.命令格式:nl [选项…...
排序模型:DIN、DINE、DSIN
目录 DIN 输入 输出: 与transformer注意力机制的区别与联系: DINE 改善DIN 输入: DSIN 动机: DIN 适用与精排,论文: Deep Interest Network for Click-Through Rate Prediction DIN模型提出的动…...
【C++】Clang-Format:代码自动格式化(看这一篇就够了)
文章目录Clang-format格式化C代码1.引言&安装1.1引言1.2 安装2. 配置字解释2.1 language 编程语言2.2 BaseOnStyle 基础风格2.3 AccessModifierOffset 访问性修饰符偏移2.4 AlignAfterOpenBracket 开括号后的对齐2.5 AlignArrayOfStructures 对齐结构体数组2.6 AlignConsec…...
Linux命令·more
more命令,功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上。 more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back&…...
为什么 SaaS 公司依靠知识库来做对客户服务?
信不信由你,客户服务是您在软件行业赚钱的核心。不仅仅是拥有出色的产品,不仅仅是拥有出色的营销,更重要的是让人们回到您家门口的客户服务。 这是因为从长远来看,留住现有客户比获得新客户更重要,而留住客户时间更长的…...
后端必备之VUE基础【黑马程序员】
黑马程序员4小时入门VUE传送门 1. 简介 Vue是一个操作JavaScript的框架,类似于jQuery,但比jQuery好用,是现在的主流 2. 测试例子 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /&…...
现代HYUNDAI EDI需求分析
现代集团(HYUNDAI)是韩国一家以建筑、造船、汽车行业为主,兼营钢铁、机械、贸易、运输、水泥生产、冶金、金融、电子工业等几十个行业的综合性企业集团。本文主要介绍HYUNDAI 的EDI需求,带大家快速理清思路,明确EDI项目的推进流程。 通信标准…...
数据库基本功之SQL的基本函数
1. 单行函数与多行函数 1.1 单行函数 指单行数据输入,返回一个值的函数. 所以查询一个表时,对选择的每一行数据都返回一个结果.[oracleoracle-db-19c ~]$ sqlplus / as sysdbaSQL*Plus: Release 19.0.0.0.0 - Production on Tue Mar 7 07:59:44 2023 Version 19.3.0.0.0Copyri…...
配置主机名与ip的映射关系
本次进行简单的小实验 通过在windows上配置主机名与IP地址的映射关系,达到我们在xshell或其他远程连接设备上,不用IP地址登陆,只需要用主机名就能实现登陆的效果 配置 首先 需要查看自己虚拟机的IP地址,找到ens33或者ens160…...
Spring Cache简单介绍和使用
目录 一、简介 二、使用默认ConcurrentMapManager (一)创建数据库和表 (二)创建boot项目 (三)使用Api 1、EnableCaching 2、CachePut 3、cacheable 4、CacheEvict 三、使用redis作为cache 一、简…...
ECCV 2022|面向精确的主动相机定位算法
标题:ECCV 2022,山东大学、北大、腾讯AILab、斯坦福和三维家联合提出,面向精确的主动相机定位算法项目地址:https://github.com/qhFang/AccurateACL.文章:Towards Accurate Active Camera Localization(ECCV 2022&…...
web实现环形旋转、圆形、弧形、querySelectorAll、querySelector、clientWidth、sin、cos、PI
文章目录1、HTML部分2、css部分3、JavaScript部分4、微信小程序演示1、HTML部分 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge">&l…...
PyCharm+Python+Selenium自动化测试动态验证码识别
driver.find_element(byBy.ID,valueUSERID).send_keys("admin")driver.find_element(byBy.ID,valuePASSWORD_VIEW).send_keys("123456")#ocr识别原理:先根据验证码的class dl_yzm定位到验证码图片,然后将验证码截图保存,…...
git版本回退简单记录
简单记录git版本回退的命令,参考的是这篇文章1 首先查看以前存档的版本: git log1. 知道要回退的版本和现在的版本差了多少代 回退上一代版本(1个以前) git reset –hard HEAD^回退上上一代版本(2个以前࿰…...
QT入门Display Widgets之QLine、QLcdNumber、QTextBrowser
目录 一、QLine界面相关 1、布局介绍 2、界面基本属性 二、QLCDNumber的介绍 1、界面布局 2、定时器代码测试 三、QTextBrowser 此文为作者原创,创作不易,转载请标明出处! 一、QLine界面相关 1、布局介绍 先看下界面中创建个Q…...
Spring学习笔记
目录1 IOC容器1.1 概念1.2 IOC的底层原理1.3 Spring中IOC容器的两种实现方式(两个接口)1.3.1 BeanFactory接口1.3.2 ApplicationContext接口1.3.3 为什么开发中使用ApplicationContext接口1.3.4 ApplicationContext接口的两个实现类1.4 IOC操作之bean管理1.4.0 bean是什么&…...
数据的标准化处理
假设各个指标之间的水平相差很大,此时直接使用原始指标进行分析时,数值较大的指标,在评价模型中的绝对作用就会显得较为突出和重要,而数值较小的指标,其作用则可能就会显得微不足道。 因此,为了统一比较的标…...
性能优化|记一次线上OOM问题处理
概述最近线上监控发现 OOM 涨幅较大,因此去尝试定位和修复这个问题,在修复了一些内存泄漏和大对象占用问题后, OOM 依旧未达到正常标准,在这些新上报的 hprof 文件中,发现几乎所有 case 中都有个叫 FinalizerReference 的对象&…...
UNIT-00模型实现智能C盘清理建议与系统优化方案生成
UNIT-00模型实现智能C盘清理建议与系统优化方案生成 不知道你有没有遇到过这种情况:电脑用着用着,突然弹出一个红色警告,告诉你C盘空间不足。点开一看,那个小小的C盘图标已经红得刺眼,可用空间只剩下可怜的几百兆。这…...
Minecraft模组本地化:Masa Mods中文体验优化指南
Minecraft模组本地化:Masa Mods中文体验优化指南 【免费下载链接】masa-mods-chinese 一个masa mods的汉化资源包 项目地址: https://gitcode.com/gh_mirrors/ma/masa-mods-chinese 对于中文玩家而言,语言障碍往往是体验国际优质模组的最大门槛。…...
105【SV】SystemVerilog Interview Questions Set 6
📘 SystemVerilog 面试题集 6 —— 验证工程师的“知识锦囊” 在芯片验证面试中,除了基本概念,面试官更关注你解决实际问题的能力。今天,我们继续解析第六组面试题,涵盖随机化、队列、类继承、竞争避免等实用技巧。每个…...
LangFlow轻松入门:无需编程基础,快速创建你的第一个LangChain应用
LangFlow轻松入门:无需编程基础,快速创建你的第一个LangChain应用 你是不是也对大语言模型(LLM)感到好奇,想亲手搭建一个智能应用,却被满屏的代码和复杂的术语吓退了?别担心,今天我…...
光模块技术在现代通信网络中的关键应用与选型指南
1. 光模块:现代通信网络的隐形功臣 你可能每天都在用手机刷视频、用电脑传文件,但很少会注意到背后默默工作的光模块。这玩意儿就像网络世界的"翻译官",专门负责把电信号和光信号互相转换。想象一下,如果没有它…...
从零开始玩转Clawdbot:快速搭建AI网关,让qwen3:32b管理变得简单高效
从零开始玩转Clawdbot:快速搭建AI网关,让qwen3:32b管理变得简单高效 1. 为什么选择Clawdbot管理qwen3:32b 想象一下,你刚在本地部署了强大的qwen3:32b大模型,准备大展身手,却发现每次调用都要写一堆代码、处理各种AP…...
PROJECT MOGFACE创意编程:使用Processing进行AI生成艺术的可视化交互
PROJECT MOGFACE创意编程:使用Processing进行AI生成艺术的可视化交互 最近在探索AI与创意编程的结合,发现了一个特别有意思的玩法:用AI来生成艺术创作的“配方”,再用代码把它画出来。这就像是你告诉AI一个想法,它帮你…...
单片机到嵌入式Linux转型路径:硬件抽象与驱动框架演进
1. 项目概述这并非一个传统意义上的硬件设计项目,而是一份嵌入式工程师职业发展路径的实践纪实与技术反思。它记录了一位从单片机开发起步、历经RTOS实践、最终成功切入嵌入式Linux应用开发领域的工程师的真实成长轨迹。其核心价值不在于提供可复现的电路板或固件镜…...
在Java中如何验证环境是否配置成功
实现Java环境配置成功最直接的方法是实施Java -version命令并输出版本信息,同时确认JAVA_HOME指向JDK根目录,PATH包含其bin路径,并能正常运行javac -version和编译操作Hellon World程序。在Java开发中,验证环境配置成功最直接的方…...
AI从“动嘴”到“动手”:2026年,一只“小龙虾”如何重塑硅基生命的数字生存方式
引言:一场静默的革命 如果你回到2025年,问一个职场人:“你如何使用AI?”他大概率会告诉你:“我会把问题发给ChatBot,它给我一段文字建议,然后我复制粘贴,自己去操作软件、写代码、整…...
