STM32--HAL库定时器学习记录(易懂)--持续学习

本文详细介绍了定时器的定义、分类,以及STM32中定时器的三个重要寄存器(预分频器、计数器和自动重装载寄存器)的作用。此外,还探讨了影子寄存器、外部时钟模式和从模式的应用,以及常用HAL库函数的速查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是定时器

  定时器就是计数器,通过计数完成一系列功能。

二、定时器的分类

定时器分为基本定时器、通用定时器、高级定时器。级别不同,功能不同。级别越高,功能越强。

三、定时器(计数器)三个重要寄存器

  1. 预分频器PSC                                                     ;通过分频器可以设定定时器的频率,即为APB1/APB2 timer clocks除以(PSC+1),为什么要减一呢?0~(80-1);0计数到80-1计数80个;0计数到80是计数81个脉冲!
    __HAL_TIM_SET_PRESCALER

  2. 计数器:在分频得到的频率下进行计数,每来一个脉冲进行计数

    __HAL_TIM_GET_COUNTER
    __HAL_TIM_SET_COUNTER

  3. 自动重装载寄存器 计数器计数到自动重装载寄存器设置的值时,计数器清零
__HAL_TIM_GET_AUTORELOAD
__HAL_TIM_SET_AUTORELOAD

 四、影子寄存器 

1.预分频器的影子寄存器-->设置新的预分频值,需要等下一个计数周期才生效

2.自动重装载的影子寄存器(开启关闭需要设置)

​编辑作用同1.差不多

五、定时器外部时钟模式

应用:传送带测距or测速、超声波测距

六、定时器从模式

  • 外部时钟模式1的功能是给定时器提供计数的信号
  • 复位模式(Reset Mode)、门模式(Gated Mode)、触发模式(Trigger Mode)是控制定时器的工作状态
  • 复位模式:重新计数 触发更新中断
  • 门模式:根据电平 暂停与继续计数
  • 触发模式:启动定时器计数  常配合单脉冲

七、定时器常用HAL库函数速查

常用库函数——click me!

### STM32 HAL实现感应开关盖垃圾桶功能的嵌入式软件项目案例 #### 1. 系统概述 该项目旨在通过STM32微控制器及其HAL实现一个智能感应开关盖垃圾桶的功能。系统能够检测到人体接近信号后自动打开垃圾箱盖,并伴有提示音效,在设定时间后关闭盖子[^1]。 #### 2. 主要硬件配置 - **核心处理器**: STM32系列单片机。 - **驱动模块**: SG90微型舵机用于控制垃圾桶盖的开启与闭合动作。 - **传感器组件**: HC-SR501红外热释电传感器负责感知人体活动。 - **电源管理**: 提供稳定的电压供给各部件正常工作,其中舵机供电需特别注意其电流需求[^2]。 #### 3. 软件设计要点 ##### 初始化部分 在`main.c`文件中完成必要的初始化操作,包括但不限于GPIO端口、定时器以及中断服务函数等资源分配和参数设定。对于SG90舵机的具体操控,则封装成独立头文件形式以便调用: ```c #ifndef __SG90_H__ #define __SG90_H__ #include "sys.h" void sg90_init(void); void sg90_angle_set(uint16_t angle); #endif /* __SG90_H__ */ ``` 上述代码片段展示了如何定义了一个简单的接口来处理舵机角度设置命令[^3]。 ##### 功能逻辑编写 以下是关于如何利用PWM技术调节伺服电机位置的一个实例演示: ```c // 定义变量 uint16_t pwmVal = 0; // 调整PWM占空比 uint8_t dir = 1; // 设置改变方向。1表示增加;0减少 // 启动Timer4第3通道PWM输出 HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_3); while (1) { HAL_Delay(1); if (dir) { pwmVal++; if (pwmVal >= 499) { dir = 0; } } else { pwmVal--; if (pwmVal == 0) { dir = 1; } } // 修改比较值,从而修改占空比 __HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_3, pwmVal); } ``` 此段伪代码描述了一种渐变式的LED亮度变化过程(即所谓的“呼吸灯”效果),但它同样适用于精确控制舵机转动的角度范围内的任意一点位置[^4]。 另外值得注意的是CCR寄存器数值计算原理:假设目标周期T等于20毫秒而期望高电平持续时间为0.5毫秒的话那么就有如下关系成立\(CRRx=\frac{T_{high}}{T}\times ARR\)因此当ARR设为200时对应的CCR应该取值约为5才能达到预期的效果[^5]。 #### 4. 实现细节说明 整个项目的具体实施流程大致可以分为以下几个方面展开讨论: - 当前状态监测: 使用HC-SR501或其他类型的运动探测装置获取环境中的动态信息作为触发条件之一; - 控制策略制定: 结合实际应用场景确定合理的响应机制比如延迟多久再执行下一步骤等等因素考虑进去形成完整的算法框架结构图解出来更直观易懂些; - 数据传输协议选择: 如果涉及到无线通信则要考虑采用何种标准格式来进行数据交换确保双方都能正确解析收到的消息内容. 综上所述我们已经了解到了有关于基于stm32hal开发出来的这样一个具备智能化特性的家用电器产品设计方案思路了希望对你有所帮助! ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值