STM32F4 读取双相编码器(附源码)
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 读取双相编码器(附源码)相关推荐
- android flv 编码器,Android 音视频深入 十七 FFmpeg 获取 RTMP 流保存为 flv (附源码下载)...
Android 音视频深入 十七 FFmpeg 获取 RTMP 流保存为 flv (附源码下载) 项目地址 https://github.com/979451341/RtmpSave 这个项目主要代码 ...
- 读取xml文件转成ListT对象的两种方法(附源码)
读取xml文件转成List<T>对象的两种方法(附源码) 读取xml文件,是项目中经常要用到的,所以就总结一下,最近项目中用到的读取xml文件并且转成List<T>对象的方法, ...
- C#实现excel文件的读取、写入以及异常处理,附源码程序
C#实现excel文件的读取与写入,附源码程序 说明 关键代码段 源程序下载地址 注意事项及异常解决 说明 通过OleDB方式,对execl文件进行读取.写入操作. 注:网上很多类似的代码,但是代码中 ...
- linux直流电机测试,带霍尔传感器编码器的直流减速电机测速原理讲解(附源码)...
查看: 14294|回复: 83 带霍尔传感器编码器的直流减速电机测速原理讲解(附源码) 高级会员, 积分 891, 距离下一级还需 109 积分 积分金钱891 注册时间2019-4-22 在线时间 ...
- C#共享内存实例 附源码
原文 C#共享内存实例 附源码 网上有C#共享内存类,不过功能太简单了,并且写内存每次都从开头写.故对此进行了改进,并做了个小例子,供需要的人参考. 主要改进点: 通过利用共享内存的一部分空间(以下称 ...
- java中batch基础_详解Spring batch 入门学习教程(附源码)
详解Spring batch 入门学习教程(附源码) 发布时间:2020-09-08 00:28:40 来源:脚本之家 阅读:99 作者:achuo Spring batch 是一个开源的批处理框架. ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(32)-swfupload多文件上传[附源码]...
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(32)-swfupload多文件上传[附源码] 文件上传这东西说到底有时候很痛,原来的asp.net服务器 ...
- 通用权限管理系统组件 中集成多个子系统的单点登录(网站入口方式)附源码
通用权限管理系统组件 (GPM - General Permissions Manager) 中集成多个子系统的单点登录(网站入口方式)附源码 上文中实现了直接连接数据库的方式,通过配置文件,自定义的 ...
- 推荐一套开源通用后台管理系统(附源码)
今日推荐 Java 8 一行代码解决了空指针问题,太厉害了...List中remove()方法的陷阱,被坑惨了!25000 字详解 23 种设计模式,原来可以这么简单!最牛逼的 Java 日志框架,性 ...
最新文章
- Java高级特性:clone()方法
- textureview 缩放_用MediaPlayer+TextureView封装一个完美实现全屏、小窗口的视频播放器...
- OpenCASCADE:OCCT应用框架OCAF之功能服务
- 17、document的全量替换,document的强制创建,document的删除(来源网络课程中的学习笔记)
- deepin/ubuntu安装苹方字体
- (八)cmockery中的calculator和run_tests函数的注释代码
- ajax兼容低版本浏览器
- Go圈10月份优质博主推荐
- 关于 awesome-algorithm 仓库中 Python Leetcode 代码删除一事
- layui怎样将响应数据展示在页面_layui怎么对弹出层显示数据
- MVC多用户B2C商城系统源码分享
- 【C语言】指针(野指针)
- JS 案例 改变网页背景颜色
- jdbc驱动加载失败-解决方案
- excel文档中了宏病毒--
- 一根辣条铸就的百亿生意,卫龙是如何成龙的
- 【Unity Shader 中Pass相关介绍_第二篇】
- 阿里云安全组已经开放端口但是服务器端口还是不能访问
- Win 10-jdk 8 下载和安装步骤
- error C3646: 未知重写说明符