STM32自带硬件编码器接口的设置

发布者:数字梦行最新更新时间:2018-09-16 来源: eefocus关键字:STM32  硬件编码器  设置 手机看文章 扫描二维码
随时随地手机看文章

在这里使用TIM3的通道1和通道2做为A B项的电平捕捉。


由于STM32自带硬件编码器接口,因此只要设置好就可使用,非常强大,下面程序测试通过。



void TIM3_Mode_Config(void)  

{  

    //u16 CCR1_Val = 2500;  

    //u16 CCR2_Val = 1000;  

    GPIO_InitTypeDef GPIO_InitStructure;  

  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;  

    TIM_ICInitTypeDef TIM_ICInitStructure;  

    //TIM_OCInitTypeDef  TIM_OCInitStructure;  

      

/*----------------------------------------------------------------*/  

      

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  

    

      

  GPIO_StructInit(&GPIO_InitStructure);  

  /* Configure PA.06,07 as encoder input */  

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;  

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  

  GPIO_Init(GPIOA, &GPIO_InitStructure);  

      

/*----------------------------------------------------------------*/      

  

      

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能TIM3  

    TIM_DeInit(TIM3);  

    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);  

      

  TIM_TimeBaseStructure.TIM_Period =0xffff;       //  

  TIM_TimeBaseStructure.TIM_Prescaler =0;       //设置预分频:  

  TIM_TimeBaseStructure.TIM_ClockDivision =TIM_CKD_DIV1 ;   //设置时钟分频系数:不分频  

  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //向上计数模式  

  //TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned1;   

    /*初始化TIM2定时器 */  

  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);  

      

    /*-----------------------------------------------------------------*/  

    //编码配置                        编码模式  

    TIM_EncoderInterfaceConfig(TIM3, TIM_EncoderMode_TI12,   

                             TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);  //TIM_ICPolarity_Rising上升沿捕获  

  TIM_ICStructInit(&TIM_ICInitStructure);  

  TIM_ICInitStructure.TIM_ICFilter = 6;         //比较滤波器  

  TIM_ICInit(TIM3, &TIM_ICInitStructure);  

    

    //TIM_ARRPreloadConfig(TIM3, ENABLE);  

 // Clear all pending interrupts  

  TIM_ClearFlag(TIM3, TIM_FLAG_Update);  

  TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);   //使能中断  

  //Reset counter  

  TIM3->CNT =0;  

      

      

    TIM_Cmd(TIM3, ENABLE);   //使能定时器3  

}  

void TIM_Init(void)  

{  

  TIM3_Mode_Config();  

}
 

 

  


 

在主程序中通过串口定时发送。  

 

int main(void)  

{  

  SystemInit();// 72m时钟  

  SysTick_Init();  

    TIM_Init();  

    NVIC_Config();  

    GPIO_74HC595_Config();  

  while (1)  

  {  

        encoder_num=TIM_GetCounter(TIM3);  

        

          

    //  dis_595(encoder_num,encoder_num);  

          

  }  

}


关键字:STM32  硬件编码器  设置 引用地址:STM32自带硬件编码器接口的设置

上一篇:STM32对码盘的正交信号处理
下一篇:stm32的编码器配置

推荐阅读最新更新时间:2024-03-16 16:14

STM32的IIC应用详解2
IIC简单介绍 小编能力有限,写的不对处还望诸位大侠指正哈! 平时所说的IIC通信指的是用单片机的两个I/O端口模拟出来的IIC,正真的IIC实际上是一块硬件电路,那是飞利浦公司的专利,要想用那就拿钱来买。有大牛既想用又不想花钱,就用两个端口模拟出了IIC通信协议,因为方便(51上的IIC改一下端口配置就可以在STM32F103上使用)所以被广泛使用。啰嗦了这么多,下面进入正题,嘿嘿。 首先IIC通信由两根线组成: 时钟线SCL:在通信过程起到控制作用。 数据线SDA:用来一位一位的传送数据。 其次IIC通信过程由开始、结束、发送、接收四个函数构成,接下来小编通过
[单片机]
基于STM32战舰开发板的内部温度传感器实验
内部温度传感器简介 测量的温度位置 内部温度传感器集成在芯片中,测量的是芯片的温度。 如何测量对应位置的温度? 温度传感器与ADC1_CH16相连,另外ADC1_CH17是与内部参照电压VREF+相连,因此我们可以通过ADC1的第16路通道测量芯片温度实时对应的电压转换得来的数字量,也可以通过ADC1的第17路通道测量内部参照电压对应的数字量。 我们知道STM32的ADC转换DATA是12Bits的,因此输入电压(小于3.3V大于0V)ADC转换为数字量的值为“大于0小于4096”。 我们由“T-V关系图”,“V的数字量”和“ADC量程”,可以得知“此时的温度”。 内部传感器配置注意事项 ① 读取内部温度传
[单片机]
基于<font color='red'>STM32</font>战舰开发板的内部温度传感器实验
stm32学习笔记(七)定时器中断
#include timer.h #include led.h ////////////////////////////////////////////////////////////////////////////////// //本程序只供学习使用,未经作者许可,不得用于其它任何用途 //Mini STM32开发板 //通用定时器 驱动代码 //正点原子@ALIENTEK //技术论坛:www.openedv.com //修改日期:2010/12/03 //版本:V1.0 //版权所有,盗版必究。 //Copyright(C) 正点原子 2009-2019 //All rights reserved ////
[单片机]
<font color='red'>stm32</font>学习笔记(七)定时器中断
STM32 Cubemax(十五) —— 串级PID以控制电机角度值为例
前言 很早前说要补的坑,今天补一下。之前介绍过单级的PID来控制电机的速度值,建议先看下面这篇文章,因为后面代码和这篇文章有关联! STM32 Cubemax(七) —— 单级PID控制带编码器的直流减速电机速度 而这次,我们来讲解一下怎么控制电机的角度,如果用单级PID控制角度会有什么问题,为什么要用串级PID。 当然串级PID不只是可以控制电机的角度,如现在诸多的控制系统,倒立摆,风力摆,平衡小车等等,都是基于串级PID的控制。 一、单级PID控制电机角度 如果还用我们之前熟知的单级PID来控制角度值,我们很容易的可以得出以下框图。 看上去很完美,没有什么问题,但这里面最大的问题就在于单片机给电机的是PWM
[单片机]
<font color='red'>STM32</font> Cubemax(十五) —— 串级PID以控制电机角度值为例
STM32学习之路(七---红外遥控)
红外遥控是一种无线、非接触控制技术,具有抗干扰能力强,信息传输可靠,功耗低。红外遥控不具有穿过障碍物去控制对象的能力。我们所学的是NEC协议的,其特征有: 1、 8位地址和8位指令长度 2、 地址和命令2次传输(确保可靠性) 3、 PWM脉冲位置调制,以发射红外载波的占空比代表“0”和“1” 4、 载波频率为38KHZ 5、 位时间为1.125ms或2.25ms NEC码的位定义:一个脉冲对应560us的连续载波,一个逻辑1传输需要2.25ms(560us脉冲+1680us低电平),一个逻辑0的传输需要1.125ms(560us的脉冲+560us低电平)。 NEC遥控指令的数据格式为:同步码头、地址码、地址反码、控制码、控制反码。
[单片机]
<font color='red'>STM32</font>学习之路(七---红外遥控)
Flash download failed-Cortex-M3的原因及解决办法
首先,此类错误基本是被STM32芯片遇到,并且基本都是使用JLINK仿真器,其实我们以下的方法不一定可以帮你解决问题,问题真正的原因我们也没有在这个帖子公开、如果需要解决,请联系armjishu的JLINK仿真器工程师,他会帮助你解决的;生产的JLINK可以解决这个问题。 MDK中出现 Error: Flash download failed- Cortex-M3 的原因及解决办法: 1.Jtag模式下,主要是芯片大小选错 出现这处问题通常是MDK中的Flash的编程算法没有配置或没有配置正确, 神舟系列用的是STM32芯片。 在主菜单中打开Flash- Configure Falsh Tools配置窗口,切换到 U
[单片机]
Flash download failed-Cortex-M3的原因及解决办法
STM32的时钟树深入详解
在STM32上如果不使用外部晶振,OSC_IN和OSC_OUT的接法 如果使用内部RC振荡器而不使用外部晶振,请按照下面方法处理: 1)对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT应悬空。 2)对于少于100脚的产品,有2种接法: 2.1)OSC_IN和OSC_OUT分别通过10K电阻接地。此方法可提高EMC性能。 2.2)分别重映射OSC_IN和OSC_OUT至PD0和PD1,再配置PD0和PD1为推挽输出并输出'0'。此方法可以减小功耗并(相对上面2.1)节省2个外部电阻。 HSI内部8MHz的RC振荡器的误差在1%左右,内部RC振荡器的精度通常比用HSE(外部晶振)
[单片机]
官方STM32的NUCLEO开发板使用
概述:因工作需求,先买了stm32的NUCLEO开发板做测试板,本人使用的是L073RZ这块板子,也是第一次接触stm32,摸索状态。这里记录一下使用过程,做笔记的同时希望也可以对别人有点帮助。 1,准备 既然要使用这块板子,那么对这块板子我们肯定是需要基本了解一下的,怎么测试,如何测试,供电问题,调试问题我们都需要看看官方文档。 这里贴一个NUCLEO开发板手册下载地址http://www.stmcu.org/document/detail/index/id-214946.里面详细的说了开发板的功能,如何使用,原理图等,有不懂的不明白的查查这手册。 在手册的5.1节,就说了如何开始使用。我把原文贴下,顺便简单翻译
[单片机]
官方<font color='red'>STM32</font>的NUCLEO开发板使用
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved