【stm32】HAL库开发——Cube配置基本定时器

目录

一、Cube配置基本定时器

1.定时器CubeMX配置介绍

2.定时器中断控制LED

3.定时器常用函数

4.定时器从模式(Reset Mode)

5.定时器的从模式(Gated Mode)

6.定时器的编码器接口


一、Cube配置基本定时器

1.定时器CubeMX配置介绍

94875fd238974099974e95d0bcb76f9f.png

定时器属性配置:451f46cdfca64c9bb5288760e4f91e51.png

2.定时器中断控制LED

1、CubeMX配置(配置定时器频率为1Hz)

abdd9795f0e64f8ca4506d11f94d9a75.png

开启中断:

7b2abae2b3994ae1b34ef5b35e8a4778.png

继续选择PA9为LED工作引脚(推挽输出):

代码实现:

HAL_TIM_Base_Start_IT(&htim2);//开始定时器中断//中断回调函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_9);}

3.定时器常用函数

HAL_TIM_Base_Stop_IT(&htim2);//关闭定时器中断
HAL_TIM_Base_Start_IT(&htim2);//开始定时器中断//中断回调函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{}

4.定时器从模式(Reset Mode)

作用:

它的作用是TIF接收到信号时(上升沿或下降沿),会清空计数器。并且触发一次 触发器中断(由触发器中断标 志位控制) 。(重装载是的中断是 更新中断 )

CubeMX设置定时器相关参数:

1. 设置从模式为Reset模式

2. 使用的触发源是TI1FP1,但选择这个后右边芯片图中的PA6引脚会自动创建标签

3. 使用内部时钟

4. 设置PSC为36000-1,自动重装寄存器为2000-1.计数器从0增加到2000,溢出周期为1秒。

5. 设置从模式的Reset模式用上升沿

6. 滤波值设置15

7、打开中断

06daaacdd3c6458ba3ebb904f4bfc493.png

743bb459c9c24500b1043acf7814cfbf.png

下面我们用这个配置实现一个功能:

假如不按下按键,CNT从0自增到2000,后count只加1,并且从0计数。

但按键按下,CNT清零然后从零重新开始计数

main.c文件中重写中断函数:

uint32_t hhRetCount=0;
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim==&htim3){if(__HAL_TIM_GET_FLAG(htim,TIM_FLAG_TRIGGER)==SET){//从模式Reset的中断__HAL_TIM_CLEAR_FLAG(htim,TIM_FLAG_TRIGGER);//需手动清空标志位}else{//自动重装的中断hhRetCount+=1;}}
}

main函数:

int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_I2C2_Init();MX_TIM3_Init();/* USER CODE BEGIN 2 */OLED_Init();//OLED初始化OLED_CLS();HAL_TIM_Base_Start_IT(&htim3);OLED_ShowStr(0,0,"CNT:",2);			//显示字符串OLED_ShowStr(0,5,"Conut:",2);			//显示字符串/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */uint32_t man = __HAL_TIM_GET_COUNTER(&htim3);//OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2);//size2(16|12)OLED_ShowNum(40, 0, hhRetCount,5,16);OLED_ShowNum(50, 5, man,4,16);}}

效果:

37276e011c214a478b443927d5229c92.png

5.定时器的从模式(Gated Mode)

作用:

它的作用是TIF接收到信号时(高电平或低电平),会暂停计数器计数。会设置触发器中断标志位,但是会触发触发器中断

CubeMX设置定时器相关参数:

4a5c607e7c7844f2bcce47653d09e8db.png

其他的和上面一样,代码实现也一样!

现象:按下按键时,TIF会输入高电平。Gated模式检查到后会开始计数器计数。不按下时则会停止计数。(定时器在高电平模式下会正常计数,低电平触发后就会停止计数)

6.定时器的编码器接口

简单原理阐述:

Encoder Interface 编码器接口 编码器接口可接收增量(正交)编码器的信号,根据编码器旋转产生的正交信号脉冲,自动控制CNT自增或自减,从而指示编码器的位置、旋转方向和旋转速度

编码器工作模式:

简单可以分为三个模式:b86a2e9eb8404b808e7be35d0ffc17a0.png要理解这些,我们先要知道怎么分辨编码器是正转和反转:

6decaa6e560a40b2adede08ea31761bd.jpeg

分辨完反向后,我们就可以根据A和B相来进行算数计次了,TI1模式就为遇到A相上下沿CNT自增,同理TI2模式就为遇到B相上下沿CNT自增,TI1和TI2模式就为遇到A相和B相上下沿CNT自增,无非就是精度问题而已,根据自己需求设定工作模式!

下面我们做两个小实验:①编码器当做时钟源 ②计数编码器速度

编码器硬件接线:

3ae7cc18901c4f56abd87e81d09058c3.png

CubeMX配置:

1. 打开编码器模式

2. 设置定时器的相关参数由于是检测速度,所以这里就不分频,尽可能让定时器快点。计数器设置 最大,防止输入信号频率太高溢出。

3. 设置计数模式,TI1计数和TI2计数

4. 设置信号不反转

a97c27ed01d34cbba3fe4316175e973f.png

代码实现:

main函数(这里我使用的OLED驱动,没有显示负数的函数,所以翻反转没办法显示负数出来):

int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init */int16_t time = 100;int man =100;/* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_I2C2_Init();MX_TIM3_Init();/* USER CODE BEGIN 2 */OLED_Init();//OLED初始化OLED_CLS();HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL);//打开定时器编码器模式OLED_ShowStr(0,0,"CNT:",2);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */time = __HAL_TIM_GET_COUNTER(&htim3);//获取当前CNTOLED_ShowNum(70, 0, time, 5, 16);HAL_Delay(100);OLED_ShowNum(70, 5, man, 5, 16);}/* USER CODE END 3 */
}

计数编码器速度并显示:

原理就是1秒钟读取一次定时器的计数值(编码器的脉冲)并清空。得到的数字就是当前的速度,单 位是Plus/S

代码实现:

int16_t hhGetEncoderSpeedCountAndReset(){int16_t Tmp;Tmp=__HAL_TIM_GET_COUNTER(&htim3);//获取当前CNT__HAL_TIM_SET_COUNTER(&htim3,0);//清空CNTreturn Tmp;
}int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_TIM3_Init();HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL);//打开定时器编码器模式OLED_Init();OLED_Clear();OLED_ShowString(2, 1, "CNT:");while (1){OLED_ShowSignedNum(2,5,hhGetEncoderSpeedCountAndReset(),5);HAL_Delay(1000);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/86938.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/86938.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nginx反向代理后端服务restful及token处理

#user nobody; worker_processes 1;#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;#pid logs/nginx.pid;events {worker_connections 1024; } #代理mysql服务 stream {upstream mysql_backend {server 192.168…

正确理解Cola StateMachine不内置事务管理机制

✅ 正确理解:Cola StateMachine 并非“不支持”事务一致性,而是“不内置”事务管理机制 因为: Cola StateMachine 是轻量级、无状态、不依赖 Spring 的框架,它本身 不绑定任何事务上下文。它不像 Spring StateMachine 那样自动与…

AudioTrack使用

** AudioTrack ** AudioTrack 是 Android 音频系统中的核心类,用于播放原始音频数据(PCM)或压缩音频(如 MP3、AAC)。它提供了低级别的音频播放控制,适合需要精细管理的场景(如游戏音效、实时音…

解密:MySQL 的常见存储引擎

在数据库领域,MySQL 作为一款广受欢迎的关系型数据库管理系统,提供了多种存储引擎以满足不同应用场景的需求。每种存储引擎都有其独特的特性、优势和适用场景。本文将深入探讨 MySQL 中几种常见的存储引擎,包括 InnoDB、MyISAM、MEMORY 和 AR…

qt和qtcreator版本关系

实例展示: 如图所示的qtcreator是使用qt5.15安装过程选择勾选了qtcreator 14.0.2,安装完成qtcreator版本信息: 安装过程中选择了这些构件kits,会自动识别到: 使用qt5.9.9另外安装的kits,需要手动设置才能识…

2个任务同时提交到YARN后2个都卡住(CDH)

文章目录 问题描述解决方案1、增加资源2、调整ApplicationMaster资源3、关闭YARN调度器的资源抢占4、不使用公平调度器 问题描述 在CDH集群上,同时提交2个任务到YARN后,2个任务都卡住 解决方案 1、增加资源 增加服务器的内存和CPU 2、调整Applicatio…

web3区块链-ETH以太坊

一. 以太坊概述 以太坊(Ethereum)作为区块链技术的代表性项目之一,自2015年发布以来,迅速成为全球区块链行业的核心基础设施。相比比特币,以太坊不仅支持点对点的价值转移,还引入了智能合约,使…

【智能协同云图库】智能协同云图库第二弹:用户管理系统后端设计与接口开发

用户管理系统 一、需求分析 对于用户模块,通常要具有下列功能: 二、方案设计 (一)库表设计 实现用户模块的难度不大,在方案设计阶段,我们需要确认以下内容: 库表设计用户登录流程如何对用户权限…

闲庭信步使用SV搭建图像测试平台:第十三课——谈谈SV的数据类型

(本系列只需要modelsim即可完成数字图像的处理,每个工程都搭建了全自动化的仿真环境,只需要双击top_tb.bat文件就可以完成整个的仿真,大大降低了初学者的门槛!!!!如需要该系列的工程…

前端进阶之路-从传统前端到VUE-JS(第一期-VUE-JS环境配置)(Node-JS环境配置)(Node-JS/npm换源)

经过前面的传统前端开发学习后,我们接下来进行前端的VUE-JS框架学习(写这篇文章的时候VUE-JS最新版是VUE3,所以默认为VUE3即可) 首先,我们要配置Node-JS环境,虽然我们还不学习Node-JS但是Node-JS可以快速配…

Requests源码分析:面试考察角度梳理

简单描述执行流程 🌟 Q:能简单描述一下发送一个requests.get(url)请求时,在requests库内部的主要执行流程吗?(从调用get方法到收到响应) 入口委托: get() 方法内部调用 requests.request(GET, url)。Session 接管: request() 方法会获取或隐式创建一个 Session 对象,并…

航天VR赋能,无人机总测实验舱开启高效新篇​

(一)沉浸式培训体验​ 在传统的无人机培训中,操作人员主要通过理论学习和简单的模拟操作来掌握技能。但这种方式存在很大局限性,难以让操作人员真正感受无人机在复杂环境下的运行状态。而航天 VR 技术引入到 VR 无人机总测实验舱后,彻底改变了…

Kotlin 函数与 Lambda 表达式

今天继续分享Kotlin学习内容。 目标:掌握函数定义、调用、参数传递,以及 Lambda 表达式的基础用法 1. 函数:Kotlin 的代码模块化工具 定义:函数是可重复调用的代码块,用于封装逻辑。 语法: fun 函数名(参…

[mcp-servers] docs | AI客户端-MCP服务器-AI 架构

链接:https://github.com/punkpeye/awesome-mcp-servers 服务器调用 相关专栏:实现Json-Rpc docs:精选MCP服务器资源列表 本专栏为精选 模型上下文协议(MCP)服务器的列表。 MCP 是一种标准协议语言,允许*…

1688商品发布API:自动化上架与信息同步

一、1688商品发布API的核心功能与技术架构 1.1 API功能全景 1688商品发布API是1688开放平台的核心组件之一,支持商品信息的自动化发布、编辑、上下架及库存同步。其核心功能包括: 商品信息管理:支持商品标题、描述、价格、库存、SKU&#…

如何在x86_64 Linux上部署Android Cuttlefish模拟器运行环境

0 软硬件环境 x86_64服务器Ubuntu20.04 LTS参考:Cuttlefish 虚拟 Android 设备参考: 笔记:搭建 Cuttlefish 运行环境可以下载编好的android-cuttlefish:android-cuttlefish.tar.gz 1 系统采用Ubuntu20.04 LTS 2 搭建cuttlefish…

机器学习9——决策树

决策树 Intro 归纳学习(Inductive Learning)的目标:从训练数据中学习一般规则,应用于未见过的数据。 决策树是一个树形结构,其中: 每个分支节点表示一个属性上的选择(即决策条件)。…

CppCon 2017 学习:The Asynchronous C++ Parallel Programming Model

清晰理解 Amdahl’s Law(阿姆达尔定律),这是一条描述并行计算加速能力的核心定律。 定义公式: S 1 ( 1 − P ) P N S \frac{1}{(1 - P) \frac{P}{N}} S(1−P)NP​1​ S S S:加速比(Speedup&#xff09…

60页PPT实战方案 | 大数据决策分析平台建设全流程路径图

目录 一、什么是大数据决策分析平台? 二、为什么要做大数据决策分析平台建设? 1. 数据已经成为“资源”,但多数组织还停留在“信息孤岛” 2. 管理复杂度上升,传统报表跟不上业务节奏 3. 外部环境不确定性高,倒逼企…

芯谷科技--降压型DC-DC转换器D4005

在现代电子设备中,电源管理芯片的性能直接关系到设备的稳定性和效率。D4005以其高效、稳定的性能和广泛的应用范围,成为众多工程师在设计电源方案时的优选。 产品简介 D4005 是一款高效降压型 DC-DC 转换器,具备固定 400KHz 开关频率&#…