STM32F4 读取AB相编码器(附源码)

1. 原理

1.1 AB相编码器


AB相编码器,简而言之,就是有两路输出的脉冲信号,通过对脉冲计数,可以知道转动了多少角度。

读取编码器的数据也就是要让单片机对脉冲计数。

1.2 定时器的编码器模式

下面是我从STM32F4的中文数据手册中 “通用定时器” 一节摘取出来的片段。
STM32系列的定时器自带有编码器的功能,并且还能通过TIMx_CR1的DIR位自动判断正反转,可以自动的递增计数或递减计数。
详细的编码器模式可以见下文中的图片。

2. 代码

代码的流程有三步:
  • GPIO口初始化
  • 定时器编码器模式初始化
  • 读取定时器计数值
源代码如下:
void encoder_tim3_init(void)
{// GPIO口初始化RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;  // GPIO口的输入模式配置很重要,不正确的话会读不到数据GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_TIM3);    GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_TIM3);// 定时器编码器模式初始化RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);TIM_DeInit(TIM3);TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);TIM_TimeBaseStructure.TIM_Prescaler = 0;TIM_TimeBaseStructure.TIM_Period = 65535;TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;//TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 这里可以自己设置,或使用默认值TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);TIM_EncoderInterfaceConfig(TIM3, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising ,TIM_ICPolarity_Rising); // 这里配置了编码器模式TIM_ICInitTypeDef TIM_ICInitStructure;TIM_ICStructInit(&TIM_ICInitStructure);//TIM_ICInitStructure.TIM_ICFilter = 10; // 这里可以自己设置,或使用默认值TIM_ICInit(TIM3, &TIM_ICInitStructure);TIM_SetCounter(TIM3, 0);TIM_Cmd(TIM3, ENABLE);
}// 读取定时器计数值
int read_encoder(void)
{int encoder_num;encoder_num = (int)((int16_t)(TIM3->CNT)); // 这里尤其需要注意数据类型TIM_SetCounter(TIM3, 0);return encoder_num;
}int main(void)
{u32 t=0;uart_init(115200);encoder_tim3_init();delay_init(84);int encoder;while(1){encoder = read_encoder();printf("t:%d\r\n",encoder);delay_ms(1000);t++;}
}

STM32F4 读取双相编码器(附源码)相关推荐

  1. android flv 编码器,Android 音视频深入 十七 FFmpeg 获取 RTMP 流保存为 flv (附源码下载)...

    Android 音视频深入 十七 FFmpeg 获取 RTMP 流保存为 flv (附源码下载) 项目地址 https://github.com/979451341/RtmpSave 这个项目主要代码 ...

  2. 读取xml文件转成ListT对象的两种方法(附源码)

    读取xml文件转成List<T>对象的两种方法(附源码) 读取xml文件,是项目中经常要用到的,所以就总结一下,最近项目中用到的读取xml文件并且转成List<T>对象的方法, ...

  3. C#实现excel文件的读取、写入以及异常处理,附源码程序

    C#实现excel文件的读取与写入,附源码程序 说明 关键代码段 源程序下载地址 注意事项及异常解决 说明 通过OleDB方式,对execl文件进行读取.写入操作. 注:网上很多类似的代码,但是代码中 ...

  4. linux直流电机测试,带霍尔传感器编码器的直流减速电机测速原理讲解(附源码)...

    查看: 14294|回复: 83 带霍尔传感器编码器的直流减速电机测速原理讲解(附源码) 高级会员, 积分 891, 距离下一级还需 109 积分 积分金钱891 注册时间2019-4-22 在线时间 ...

  5. C#共享内存实例 附源码

    原文 C#共享内存实例 附源码 网上有C#共享内存类,不过功能太简单了,并且写内存每次都从开头写.故对此进行了改进,并做了个小例子,供需要的人参考. 主要改进点: 通过利用共享内存的一部分空间(以下称 ...

  6. java中batch基础_详解Spring batch 入门学习教程(附源码)

    详解Spring batch 入门学习教程(附源码) 发布时间:2020-09-08 00:28:40 来源:脚本之家 阅读:99 作者:achuo Spring batch 是一个开源的批处理框架. ...

  7. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(32)-swfupload多文件上传[附源码]...

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(32)-swfupload多文件上传[附源码] 文件上传这东西说到底有时候很痛,原来的asp.net服务器 ...

  8. 通用权限管理系统组件 中集成多个子系统的单点登录(网站入口方式)附源码

    通用权限管理系统组件 (GPM - General Permissions Manager) 中集成多个子系统的单点登录(网站入口方式)附源码 上文中实现了直接连接数据库的方式,通过配置文件,自定义的 ...

  9. 推荐一套开源通用后台管理系统(附源码)

    今日推荐 Java 8 一行代码解决了空指针问题,太厉害了...List中remove()方法的陷阱,被坑惨了!25000 字详解 23 种设计模式,原来可以这么简单!最牛逼的 Java 日志框架,性 ...

最新文章

  1. Java高级特性:clone()方法
  2. textureview 缩放_用MediaPlayer+TextureView封装一个完美实现全屏、小窗口的视频播放器...
  3. OpenCASCADE:OCCT应用框架OCAF之功能服务
  4. 17、document的全量替换,document的强制创建,document的删除(来源网络课程中的学习笔记)
  5. deepin/ubuntu安装苹方字体
  6. (八)cmockery中的calculator和run_tests函数的注释代码
  7. ajax兼容低版本浏览器
  8. Go圈10月份优质博主推荐
  9. 关于 awesome-algorithm 仓库中 Python Leetcode 代码删除一事
  10. layui怎样将响应数据展示在页面_layui怎么对弹出层显示数据
  11. MVC多用户B2C商城系统源码分享
  12. 【C语言】指针(野指针)
  13. JS 案例 改变网页背景颜色
  14. jdbc驱动加载失败-解决方案
  15. excel文档中了宏病毒--
  16. 一根辣条铸就的百亿生意,卫龙是如何成龙的
  17. 【Unity Shader 中Pass相关介绍_第二篇】
  18. 阿里云安全组已经开放端口但是服务器端口还是不能访问
  19. Win 10-jdk 8 下载和安装步骤
  20. error C3646: 未知重写说明符

热门文章

  1. python爬虫之古诗文网中验证码的识别并登录----第三方平台
  2. 网易云算法笔试题----牛牛睡觉
  3. python:求高斯求和!
  4. js 象棋游戏 _ 支持双方在线对战
  5. 25K 月薪的 SQL Server DBA 面试一题
  6. 手机号码在网时长 API 探索:精准营销与用户洞察
  7. 菲尼克斯Proficloud 在中国深度落地
  8. Python转换 %XX%XX%XX%XX 与 文字
  9. c语言在屏幕上输出三维图形,C语言怎样画正方体
  10. Locount dataset 记录