STM32定时器使用

文章介绍了STM32定时器的基本使用,包括设置定时器的分频、计数模式和中断事件,以及启动和停止定时器的函数。还讨论了PWM输出、输入捕获功能,特别提到了编码器模式,强调了编码器模式下A/B信号线的相位差检测。此外,提到了RTC时钟和外部32.768KHz晶振对于断电时间保存的重要性。
摘要由CSDN通过智能技术生成

1.基本的定时器使用

1.1. 说明

如果仅做普通的定时器使用,需要设置的无非就是时钟的分频,计数模式,计数周期和是否自动装载重新计数,一般设置成中断形式。
触发事件选择,包括复位,使能和更新事件

1.2 设置

在这里插入图片描述

1.3 函数

定时器启动:
HAL_TIM_Base_Start(), HAL_TIM_Base_Start_DMA(), HAL_TIM_Base_Start_IT()
定时器停止:
HAL_TIM_Base_Stop(), HAL_TIM_Base_Stop_DMA(), HAL_TIM_Base_Stop_IT()
读取数值:
__HAL_TIM_GET_COUNTER(HANDLE)

2.PWM输出

设置

函数

3.输入捕获(Input Capture direct mode)

3.1 说明

可以记录上升沿,下降沿的时间,用于记录脉冲宽度等

4.计数模式

可以使用IO中断功能

5.编码器

5.1 说明

编码器使用A,B两组信号线,根据A/B的相位差判断正反转。
编码器占用两个通道,之前做过想用一个定时器,两路是编码器,两路是PWM输出,结果不知道为什么不能同时使用。
不是所有定时器都有编码器功能。
需要设置时钟周期。

参考:
https://blog.csdn.net/weixin_41082463/article/details/105040893

5.2 设置

在这里插入图片描述

5.3 函数

开始计数:HAL_TIM_Encoder_Start(),HAL_TIM_Encoder_Start_DMA(), HAL_TIM_Encoder_Start_IT()
停止计数:HAL_TIM_Encoder_Stop(),HAL_TIM_Encoder_Stop_DMA(), HAL_TIM_Encoder_Stop_IT()
读取数值:
__HAL_TIM_GET_COUNTER(HANDLE)
读取方向:
__HAL_TIM_IS_TIM_COUNTING_DOWN(HANDLE)

6. PWM输入

7. XOR ON/Hall Sensor Mode

8.RTC时钟

如果想要断电保存时间,需要外接32.768KHz的晶振,只使用电池引脚供电不能让晶振继续工作。这个BUG可能只在某些系列芯片中。

STM32定时器是该系列微控制器中的重要组成部分,它通常用于计时、计数、PWM信号生成、输入捕获等功能。STM32定时器有基本定时器、通用定时器和高级控制定时器等类型,不同的定时器功能有所不同。 使用STM32定时器的基本步骤如下: 1. 配置时钟源:首先需要配置定时器的时钟源,确保定时器可以正常工作。通常这涉及到启动定时器的时钟(APBx上的定时器时钟使能)。 2. 定时器初始化:通过定时器的控制寄存器来配置定时器的工作模式、预分频值、自动重载值等参数。预分频值决定了定时器计数的频率,而自动重载值则决定计数的范围。 3. 中断或事件配置(可选):如果需要定时器产生中断或用于事件触发,还需要配置相应的中断使能,并且在中断服务程序中处理定时器溢出等事件。 4. 启动定时器:最后,使能定时器计数。如果之前配置了中断,当定时器达到设定条件时(比如溢出或匹配到预设值),会触发中断。 下面是一个简化的代码示例,展示如何在STM32中配置和启动一个基本的定时器: ```c // 假设使用的是STM32的HAL库 #include "stm32f1xx_hal.h" // 定时器初始化函数 void TIM3_Init(void) { // 使能TIM3时钟 __HAL_RCC_TIM3_CLK_ENABLE(); // 定时器句柄声明 TIM_HandleTypeDef htim3; // 定时器基本配置 htim3.Instance = TIM3; htim3.Init.Prescaler = 0xFFFF; // 设置预分频值 htim3.Init.CounterMode = TIM_COUNTERMODE_UP; // 向上计数模式 htim3.Init.Period = 0xFFFF; // 设置自动重载值 htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; // 设置时钟分频因子 HAL_TIM_Base_Init(&htim3); // 启动定时器 HAL_TIM_Base_Start(&htim3); } // 主函数中调用初始化函数 int main(void) { // HAL库初始化 HAL_Init(); // 配置系统时钟 SystemClock_Config(); // 初始化定时器 TIM3_Init(); // 主循环 while (1) { // 其他任务... } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值