F103C8T6hal库定时器基础
时间: 2025-05-22 16:17:04 AIGC 浏览: 35
### STM32 F103C8T6 HAL库定时器基础知识
#### 什么是HAL库?
硬件抽象层(Hardware Abstraction Layer, HAL)是一种由STMicroelectronics提供的软件框架,用于简化STM32微控制器的开发过程。它提供了一组统一的应用程序接口(API),使得开发者无需深入了解底层寄存器操作即可完成复杂的外设配置和功能实现[^1]。
#### 定时器的基础概念
在嵌入式系统中,定时器是一个非常重要的外设模块,它可以用来测量时间间隔或者生成周期性的事件触发信号。对于STM32系列单片机而言,其内部集成了多种类型的定时器,包括通用定时器、高级定时器以及看门狗定时器等。这些定时器可以被配置成不同的模式来满足各种应用场景的需求,比如PWM波形输出、捕获/比较等功能。
#### 配置步骤概述
虽然不允许使用诸如“首先”这样的引导词,但是为了描述清楚整个流程,这里按照逻辑顺序列举几个关键环节:
- **初始化项目环境**
利用工具如STM32CubeMX生成初始代码结构并设置好相应的参数选项。
- **定义GPIO引脚作为LED连接端口**
这一步骤涉及到指定哪个IO管脚将与外部设备相连,并将其设定为推挽输出模式以便驱动LED元件亮灭变化。
- **创建TIM实例对象及其回调函数声明**
通过调用`__HAL_RCC_TIMx_CLK_ENABLE()`宏语句开启对应定时单元时钟源供应;接着实例化具体使用的Timer编号实体变量名;最后编写关联中断服务子程序原型说明部分。
以下是基于上述理论的一个简单例子展示如何运用HAL API 来达成基本的时间延迟效果从而让LED每隔一秒切换状态一次:
```c
#include "stm32f1xx_hal.h"
// 假定PB5接有LED灯泡
#define LED_PIN GPIO_PIN_5
#define LED_GPIO_PORT GPIOB
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_TIM2_Init(void);
int main(void){
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM2_Init();
while (1){}
}
/* TIM2 init function */
static void MX_TIM2_Init(void) {
__HAL_RCC_TIM2_CLK_ENABLE();
TIM_HandleTypeDef htim2;
htim2.Instance = TIM2;
// 设置自动重装载值以决定计数值范围(此处假设系统核心频率72MHz)
uint32_t prescalerValue = ((SystemCoreClock / 2) / 1000) - 1;
htim2.Init.Prescaler = prescalerValue ;
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
htim2.Init.Period = 999;//每秒发生一次更新事件
if(HAL_TIM_Base_Init(&htim2)!= HAL_OK){
Error_Handler();
}
/* 启动定时器 */
HAL_TIM_Base_Start_IT(&htim2);
}
/**
* @brief This function handles TIM interrupt request.
*/
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
static uint8_t state=0;
if(htim->Instance==TIM2){
if(state ==0 ){
HAL_GPIO_WritePin(LED_GPIO_PORT ,LED_PIN ,GPIO_PIN_SET );
state=1;
}else{
HAL_GPIO_WritePin(LED_GPIO_PORT ,LED_PIN ,GPIO_PIN_RESET );
state=0;
}
}
}
```
以上代码片段展示了如何借助HAL库中的相关函数去启动一个基础版的定时机制,并且每当达到预设时间段之后就会改变目标LED的状态。
###
阅读全文
相关推荐




















