【STM32HAL库学习】定时器-HAL_TIM_Base_Start_IT和 HAL_TIM_Base_Start 区别

HAL_TIM_Base_Start_IT函数启动定时器并开启中断,在定时器计数器溢出时,会触发中断.
HAL_TIM_Base_Start函数仅仅是启动定时器而已,不会开启中断,因此不会在计数器溢出时触发中断。这个函数主要用于需要通过软件查询计数器的值来判断时间的应用场景,例如精确的延时控制等

两者的区别在于是否开启中断,以及是否适用于周期性任务

举例使用场景
HAL_TIM_Base_Start_IT
配置定时器的参数,比如时钟源、预分频系数、计数器周期等。
通过HAL_TIM_Base_Start_IT函数启动定时器并开启中断。
实现定时器的中断服务程序,并在其中执行需要周期性执行的任务。

HAL_TIM_Base_Start
配置定时器的参数,比如时钟源、预分频系数、计数器周期等。
通过HAL_TIM_Base_Start函数启动定时器。
使用__HAL_TIM_GET_COUNTER函数查询计数器的值,并根据需要进行延时或者时间判断等操作。

### 正确启动 STM32定时器 TIM3 的 HAL 函数 `HAL_TIM_Base_Start` 方法 在使用 STM32HAL 时,正确配置启动定时器是一个常见的需求。以下是关于如何通过 HAL 序列化接口来初始化并启动 TIM3 定时器的方法。 #### 配置步骤说明 为了确保 TIM3 能够正常工作而不进入 HardFault_Handler 函数,需注意以下几个方面: 1. **启用时钟源** 在调用任何与 TIM3 相关的功能之前,必须先使能其对应的外设时钟。这可以通过 RCC 控制寄存器完成。 ```c __HAL_RCC_TIM3_CLK_ENABLE(); ``` 2. **设置定时器参数** 初始化结构体 `TIM_HandleTypeDef` 并填充必要的字段。这些字段定义了计数模式、预分频系数以及自动重载值等重要属性[^1]。 ```c TIM_HandleTypeDef htim3; void MX_TIM3_Init(void) { htim3.Instance = TIM3; htim3.Init.Prescaler = 8399; // 假设系统时钟为 84MHz,则此值对应约 1ms 分辨率 htim3.Init.CounterMode = TIM_COUNTERMODE_UP; // 向上计数模式 htim3.Init.Period = 999; // 自动重装载值 (ARR),即周期长度 htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; if (HAL_TIM_Base_Init(&htim3) != HAL_OK) { // 初始化基础功能 Error_Handler(); // 错误处理程序 } } ``` 3. **启动定时器** 使用 `HAL_TIM_Base_Start()` 来激活定时器的基础操作。如果需要中断支持,则可以改用带 IT 版本的 API 即 `HAL_TIM_Base_Start_IT()` 。需要注意的是,在使用后者前应合理分配 NVIC 设置中的抢占优先级(Preemption Priority)[^2] 子优先级(Sub Priority),以防止高频率触发导致处理器负载过高甚至崩溃。 ```c /* Start the timer without interrupt */ HAL_TIM_Base_Start(&htim3); /* Alternatively, start with interrupt enabled */ HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0); // 设定最低抢占级别及相同响应速度下的最高优先权 HAL_NVIC_EnableIRQ(TIM3_IRQn); HAL_TIM_Base_Start_IT(&htim3); ``` 4. **回调机制** 当采用中断驱动方式运行时,还需要实现相应的 ISR 处理逻辑。通常情况下会覆盖默认生成的服务例程模板文件里的具体实现部分。 ```c void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){ if(htim->Instance==TIM3){ // 执行特定于 TIM3 到期事件的动作... } } ``` 以上就是基于 HAL 针对 STM32 微控制器系列中 TIM3 组件的一般性介绍及其典型应用场景下基本流程概述。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值