STM32F407定时器编码器接口模式

2023-05-16

STM32F407定时器编码器接口模式
16位定时器扩展32位

//TIM5初始化为编码器接口模式,读取光栅尺数值
void TIM5_Config(u32 arr,u32 psc)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	TIM_ICInitTypeDef TIM_ICInitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE);  	//TIM5时钟使能    
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); //使能PORTF时钟	
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; //光栅尺
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
	GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; //开漏输出
	GPIO_InitStructure.GPIO_PuPd= GPIO_PuPd_UP; //上拉
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;	//速度100MHz
	GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PD
	
	GPIO_PinAFConfig(GPIOA,GPIO_PinSource0,GPIO_AF_TIM5); //复用为TIM5
	GPIO_PinAFConfig(GPIOA,GPIO_PinSource1,GPIO_AF_TIM5); //复用为TIM5
	
	TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);  
	TIM_TimeBaseStructure.TIM_Prescaler=psc;  //定时器分频
	TIM_TimeBaseStructure.TIM_Period=arr;   //自动重装载值 0xFFFF 65535
	TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; 	//时钟分频
	TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
	TIM_TimeBaseInit(TIM5,&TIM_TimeBaseStructure);  //初始化TIM5
	
  //编码器模式1 – 根据TI1FP1的电平,计数器在TI2FP2的边沿向上/下计数。
	TIM_EncoderInterfaceConfig(TIM5,TIM_EncoderMode_TI1,TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);  //编码器接口模式配置
	TIM_ICStructInit(&TIM_ICInitStructure);  //默认值赋值
	TIM_ICInitStructure.TIM_ICFilter =0x2;   //滤波 0x0~0xF  
	TIM_ICInit(TIM5, &TIM_ICInitStructure);  //初始化

	TIM_ClearFlag(TIM5, TIM_FLAG_Update);//清除标志位
	TIM_ITConfig(TIM5, TIM_IT_Update, ENABLE); //更新中断 
 
	TIM_SetCounter(TIM5,0);  //计数器清零
	TIM_Cmd(TIM5, ENABLE); 
	
	NVIC_InitStructure.NVIC_IRQChannel=TIM5_IRQn;   //添加中断函数
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x02; //抢占优先级2
	NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03; //子优先级3
	NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
	NVIC_Init(&NVIC_InitStructure); 	
}
volatile int16_t N=0;
void TIM5_IRQHandler(void)   //溢出中断
{
	if(TIM_GetITStatus(TIM5,TIM_IT_Update)==SET) //中断标志位
	{
		      if((TIM5->CR1 & TIM_CR1_DIR) == TIM_CR1_DIR)//向下计数 DIR=1
          {          
                     N--;               
          }
          else if((TIM5->CR1 & TIM_CR1_DIR) == 0)//向上计数 DIR=0
          {
                     N++;            
          }
	}
	TIM_ClearITPendingBit(TIM5,TIM_IT_Update);  //清除中断标志位    
}
int main(void)
{ 
	u32 data;

	TIM5_Config(0XFFFF,0); //定时器初始化     16位自动加载

	while(1)
	{
			data=N * 65536 + TIM5->CNT;     //读取编码器值
		    data=GetENCODECounter(data);  //编码器值反方向处理
		
			delay_ms(200);  
	}   
}
//编码器反方向转换
//输出0xX0000000  正方向X=0  反方向X=1
u32 GetENCODECounter(u32 count)  //编码器反方向数值转换
{
	if(count>0X80000000)     //负方向
	{
		count=0XFFFFFFFF-count;  //
		count=count | 0X80000000 ;			
	}
	return count;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32F407定时器编码器接口模式 的相关文章

  • Python subprocess模块解析

    在学习这个模块前 xff0c 我们先用Python的help 函数查看一下subprocess模块是干嘛的 xff1a DESCRIPTION This span class hljs keyword module span allows
  • Java与C/C++的性能对比

    写这个主题是因为若干时间前一时头脑发热 xff0c 写了这个帖子 xff08 http www iteye com topic 857722 xff09 xff0c 现在看来这个帖子很幼稚 xff0c 尤其是二楼 61 61 xff0c 后
  • char数组与char指针的区别与联系

    字符串 xff08 char xff09 与字符数组 xff08 char 区别 在C语言中 xff0c 对字符串的操作主要有两种方式 xff1a 一是字符数组 char xff0c 二是使用字符指针 char 接下来最这两种所使用的情况做
  • Ubuntu系统火狐浏览器无法上网方案解决

    在国内google浏览器无法直接使用 xff0c 我们安装ubuntu系统自带的火狐浏览器在设置中选择的事google上网 xff0c 所有大家网络连接没问题 xff0c 就是无法上网 解决问题如下 xff1a 第一种 xff1a 重新安装
  • 解决ROS常遇到的Couldn’t find executable named报错解决

    解决办法 xff1a 将执行文件打开权限允许作为程序执行文件
  • ROS学习(一)ROS Noetic安装及环境配置

    文章目录 前言0 ROS Installation Options1 Installation1 1 Configure your Ubuntu repositories1 2 Setup your sources list1 3 Set
  • 嵌入式Linux 时间同步 gpsd+chrony

    嵌入式Linux 时间同步 gpsd 43 chrony 嵌入式Linux系统 xff0c 外接GPS设备 xff0c 系统通过NMEA数据和pps进行时间同步 xff0c 同时将本系统作为时间同步服务器 一 基本原理 NMEA中获取UTC
  • ModbusRTU串口读写报文解析

    0 MODBUS速览 Modbus是一种通信协议 xff0c ModubsRTU是它的一种传输模式 xff0c 通过这个协议能实现串口数据通讯 可以用C 控件读写串口 xff0c 也可以直接使用开源的串口助手 为了简化问题 xff0c 本文
  • Types of daTabases数据库类型

    NoSQL databases provide the performance scalability and stability that s required by the modern data driven apps we inte
  • jeston TX1_TX2 ubuntu18.04安装(国内安装源gitee)ROS Melodic

    查看ubunut系统信息 cat proc version uname a lsb release a 我自己的系统信息是 xff1a 由于我自己已经迁移了系统至SD卡 xff0c 所以存储比较富裕 xff1a 通过对应的ubuntu版本安
  • 9 个将改变一切的物联网应用

    无论您是有远见的 CEO 技术驱动型 CEO 还是 IT 领导者 xff0c 您之前都遇到过 IoT 一词 它经常与最高级一起使用 xff0c 表示它将如何彻底改变您的工作 娱乐和生活方式 但这只是另一个流行语 xff0c 还是承诺的技术圣
  • Android aplog是什么?

    aplog 是系统应用层的log xff0c 比如应用程序无响应或强行关闭 xff0c kernel相关的 xff0c 比如driver xff08 相机 蓝牙 usb 启动 xff09 出了开机问题 手机对服务唤醒和休眠的一些记录蓝牙相关
  • android 7.0 加入 android:directBootAware

    Android N引入了一个新特性 xff1a Direct Boot Mode 设备启动后进入的一个新模式 xff0c 直到用户解锁 xff08 unlock xff09 设备此阶段结束 在此 Direct Boot Mode 下 APP
  • Kotlin概述与Java的比较

    Kotlin是JetBrains的一种新的编程语言 它首次出现在2011年 xff0c JetBrains推出了名为 科特林 的项目 Kotlin是开源语言 基本上像Java一样 xff0c C和C 43 43 Kotlin也是 静态类型编
  • armlink 用法详解

    映像文件 image xff1a 是指一个可执行文件 xff0c 在执行的时候被加载到处理器中 一个映像文件有多个线程 它是ELF Executable and linking format 格式的 段 Section xff1a 描述映像
  • 人工智能的五大核心技术

    计算机视觉 机器学习 自然语言处理 机器人和语音识别是人工智能的五大核心技术 xff0c 它们均会成为独立的子产业 计算机视觉 计算机视觉是指计算机从图像中识别出物体 场景和活动的能力 计算机视觉技术运用由图像处理操作及其他技术所组成的序列
  • ubuntu下文件拷贝命令cp命令

    该命令的功能是将给出的文件或目录拷贝到另一文件或目录中 xff0c 就如同DOS下的copy命令一样 xff0c 功能非常强大 语法 xff1a cp xff3b 选项 xff3d 源文件或目录 目标文件或目录 说明 xff1a 该命令把指
  • android camera 照相机/摄像机

    一 camera启动 1 一个activity启动调用流程 xff1a onCreate gt onStart gt onResume onCreate xff1a 1 可添加所需布局文件 xff0c 画界面 2 开启线程 xff0c 启动
  • 正确学习javascript。困惑的指南

    正确学习 javascript 困惑的指南 迷失了 javascript xff1f 这一点都不奇怪 你需要一个能告诉你真正重要的指南 我们只有一个 向左看 有一个框架市场 xff0c 它们相互竞争 xff0c 赞扬它们的能力 向右看 这是
  • 【ROS学习2】创建ROS工作空间及功能包

    目录 创建ROS工作空间及功能包工作空间 workspace src 代码空间 Source Space build 编译空间 Build Space devel 开发空间 Development Space install 安装空间 In

随机推荐

  • 【GStreamer 】5-5-总结USB相机转RTSP网络视频流-推流usb摄像头JPEG

    我们使用gstreamer rtsp server xff0c 实现了USB相机转RTSP网络流的基本功能 xff0c 之前很多篇都讲了如何实现 xff0c 这一次我们集中精力解决之前的一些问题 文章 GStreamer 5 4 USB相机
  • C程序设计语言 5-3

    练习5 3 用指针方式实现第2章中的函数strcat 函数strcat s t 将t指向的字符串复制到s指向的字符串的尾部 include lt stdio h gt int my strcat char char int main cha
  • NuttX 文件系统架构介绍(7.14)

  • 谈谈memcpy函数的优化(纯C)

    在使用C语言编程时 xff0c 我们常用memcpy来复制内存数据 xff0c 但很少有人会关注到memcpy怎么实现 最简单的memcpy功能实现如下 xff1a void low memcpy void dst const void s
  • USB DEVICE调试心得

    一 USB设备链接后无法HUB不上报发现新设备 USB控制器未打开 xff0c USB DP DM引脚配置不正确 二 能够发现设备 xff0c 但HOST端提示获取描述符失败 获取描述符是 USB DEVICE 链接后 HOST 向 DEV
  • PX4uORB介绍[4]-对象和数据结构

  • ubuntu禁止显示器休眠的方法

    近期在firefly RK3399开发板上调试代码 xff0c 经常遇到显示器自动休眠 xff0c 并且发现每次休眠都对系统实时性产生一些影响 xff0c 最终在万能的CSDN博客上找到解决办法 xff1a Linux不让显示器休眠的方法
  • STM32F4 SPI RX/TX DMA 读写FLASH数据

    STM32 使用DMA读写FLASH数据需要注意以下几点 xff1a 1 SPI全双工模式下 xff0c 无论读写FLASH数据均需要同时使能RX TX DMA 2 写数据时回读数据应当丢弃 xff0c 读数据时应当发送0xff来启动SPI
  • C++ vector的用法总结(整理)

    vector 是向量类型 xff0c 它可以容纳许多类型的数据 xff0c 如若干个整数 xff0c 所以称其为容器 它相当于一个动态的数组 当程序员无法知道自己需要的数组的规模多大时 用其来解决问题可以达到最大节约空间的目的 vector
  • 【问题已解决】无法定位程序输入点XXX于动态链接库xxxxxx

    因为刚接触OSG需要用CMake进行编译 xff0c 在操作上的问题还可以适应 xff0c 主要是电脑环境的影响比较大 编译成功后 xff0c 运行程序提示缺少一些dll文件 这里的主要处理办法是下载缺失的部分 xff0c 加到对应的文件夹
  • [python]重新安装pip

    目录 pip简介 一 恢复easy install文件 二 安装pip pip简介 python中一开始的import指令大家都不陌生 xff0c 也是因为可以调用不同模块的功能 xff0c 被称为 胶水语言 一般安装外部库有很多种方式 x
  • 【ROS2 入门】Jeston TX1 JetPack_4.6.3环境 ubuntu 18.04 ROS2 安装

    大家好 xff0c 我是虎哥 xff0c 从今天开始 xff0c 我将花一段时间 xff0c 开始将自己从ROS1切换到ROS2 xff0c 在上一篇中 xff0c 我们再虚拟机环境中安装了 ROS2 eloquent版本 xff0c 并完
  • 【已解决】拯救者Y7000不能调节亮度

    在上午的时候 xff0c 电脑突然有一些进程失控 xff0c 在任务管理器中一些服务关不掉 xff0c 电脑接近死机 xff0c 只能重启来解决 但是重启之后电脑突然很暗 回顾今天发生的情况 xff0c 应该是软件的锅了 应该是因为该型号的
  • 【已解决】win10 “你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问。

    在访问局域网共享盘的时候 xff0c 突然出现报错 通过强大的网友 xff0c 通过改变组策略权限可以解决 1 按下win 43 R xff0c 输入gpedit msc 2 打开 管理模板 gt 网络 gt Lanman工作站 gt 启动
  • 【已解决】win10离线安装.net framework 3.5(错误:0x8024402c)

    首先说一下问题的背景 xff0c PC是离线环境win10系统 xff0c 主要在在离线安装VS2008的时候需要先安装这个低版本 Net 网上有很多方式 xff0c 这次参考价值最大的是这两个 Win10离线安装 net framewor
  • 【已解决可更新】VS2008 写入位置 0xCDCDCDCD 时发生访问冲突

    这个问题分两个小问题来细说 问题的背景是VS2008项目中封装了网络协议接口类 xff0c 对象成员有一个SOCKET类型成员变量和封装的进行三次握手的成员函数 在调用成员函数时报错发生访问冲突 1 写入位置 0xCDCDCDCD 时发生访
  • 【python】删除python代码中的简单注释

    可以当作一个简单的小工具来使用 xff0c 不过也是比较有局限性 xff0c 只能去掉 开头的注释行 使用内置函数 xff0c 没有引入模块 filename 61 34 xxx txt 34 打开名为xxx的txt文件 file 61 o
  • 再见2022,加油2023

    其实变化最大的一点就是 xff0c 这一年自己变成了一个北漂 没有很多的成熟的规划 xff0c 没有很多预算准备来到了北京 那会儿和之前的同事合租 xff0c 也给他添了不少麻烦 最开始到北京的时候 xff0c 因为口罩问题入职前生活状态比
  • 有效解决“SyntaxError: Non-UTF-8 code starting with” 语法错误

    在程序中出现中文的时候会有这种报错 xff0c 在代码的第一行加一句注释 xff0c 说明一下字符类型可以解决 coding 61 gbk coding utf 8这两种在我的程序里是亲测有效的
  • STM32F407定时器编码器接口模式

    STM32F407定时器编码器接口模式 16位定时器扩展32位 span class token comment TIM5初始化为编码器接口模式 xff0c 读取光栅尺数值 span span class token keyword voi