STM32F4单片机读取光电编码器的小理解

STM32F4单片机读取光电编码器的小理解

大家好! 我是木兔同学,这是我第一次发CSDN的博客,本人接触的单片机主要是STM32f407,今天谈一谈STM32F4单片机读取光电编码器的小理解,希望大家多多批评指正。>__<

讲述方式

1.对单片机的理解往往是对寄存器的理解操作
2. 通过代码的描述来理解
3. 增加了寄存器的手册部分

编码器原理: 在这里插入图片描述
在这里插入图片描述
说白了就是编码器把轮子的转速转换成差个相位的两路可测频率的方波,单片机通过读取方波的个数来测速。

一、先看一下配置32定时器编码器的代码:

void TIM2_ENC_Init(void)//Motor_A
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; //开漏输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_PinAFConfig(GPIOA,GPIO_PinSource15,GPIO_AF_TIM2);
GPIO_PinAFConfig(GPIOB,GPIO_PinSource3,GPIO_AF_TIM2);//引脚复用

TIM_EncoderInterfaceConfig(TIM2,TIM_EncoderMode_TI1,TIM_ICPolarity_Rising,TIM_ICPolarity_Rising);//编码器接口配置

TIM_Cmd(TIM2, ENABLE);
}

当然,这块代码中最重要的就是
//编码器接口配置
TIM_EncoderInterfaceConfig(TIM2,TIM_EncoderMode_TI1,TIM_ICPolarity_Rising,TIM_ICPolarity_Rising);

可以探寻寄存器一下

这个函数有4个参数
第一个是选定定时器
第二个是编码器模式:指定TIMx编码器模式
第三四个是指定IC1、IC2极性

第一个不用多说,选哪个定时器,我查了一下,stm32f407直接支持外接编码器的是定时器TIM1—TIM5和TIM8.

第二个是编码器模式:一共有3种
在这里插入图片描述
对应的寄存器是:TIMx 从模式控制寄存器 (TIMx_SMCR)的位 2:0 SMS:
在这里插入图片描述
第三四个是指定IC1、IC2极性:
在这里插入图片描述
对应的寄存器是:TIMx 捕获/比较使能寄存器 (TIMx_CCER)的0-3位:
在这里插入图片描述
在这里插入图片描述

二、STM32F407的中文参考手册中也有总体的概括:

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(在这里给大家贴的全一点,就不用大家再去翻中文手册喽>-<)

三、最后说一下定时器对编码器的数据提取:
在这里插入图片描述
说一下为什么是TIM2->CR1&0x01
又到了寄存器环节(看吧,寄存器真的好重要的)
在这里插入图片描述
在这里插入图片描述
因为是16位寄存器,0x10就是0000 0000 0001 0000
就是位4,计数的方向,为1就是递减计数,就是一开始寄存器是最大值,读取几个就减几个,所以有了
Encoder_Date[0] = 0xffffffff-TIM2->CNT;
编码器提供的数据就储存在Encoder_Date[0] 这个数组里,就可以使用了。

好了,这次博客就说这么多了,谢谢大家,希望大家能够提出宝贵意见,之后博客会持续更新,欢迎大家关注,给大家拜年啦!!!

  • 10
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
stm32f4单片机是一款由意法半导体开发的高性能的32位微控制器系列。它具有丰富的外设功能,包括多个通用定时器、高速数字接口、模拟接口等,适用于各种应用领域。 stm32f4单片机的硬件图可以分为多个部分进行说明。首先是主控芯片部分,它是整个单片机的核心部件,包含了主处理器、存储器接口等。主处理器可以是ARM Cortex-M4核心,它具有高性能和低功耗的特点,可以处理复杂的算法和任务。存储器接口用于连接外部存储器,可以提供额外的存储容量。 其次是外设部分,stm32f4单片机具有丰富的外设接口,可以连接各种外设模块,实现各种功能。例如,通用定时器可以用于计时和产生时钟信号;高速数字接口可以用于连接LCD显示屏或摄像头模块;模拟接口可以用于连接传感器等。 除此之外,还有电源接口、时钟电路、调试接口等部分。电源接口用于提供工作电压,通常需要连接外部电源。时钟电路用于提供时钟信号,控制芯片的工作频率。调试接口用于连接调试工具,方便对单片机进行调试和程序下载。 总之,stm32f4单片机的硬件图展示了各个部分的布局和连接,包括主控芯片、外设接口、电源接口、时钟电路以及调试接口等。这些硬件部件协同工作,使得stm32f4单片机具有强大的计算能力和丰富的外设功能,适用于各种嵌入式系统和应用领域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值