STM32C8T6使用定时器记时
时间: 2025-04-16 16:06:35 浏览: 31
### 使用STM32C8T6单片机的定时器进行计时
#### 初始化配置
为了使能定时器功能,首先需要初始化硬件资源。这通常涉及到设置系统时钟、GPIO端口以及具体的定时器参数。
对于基于STM32CubeMX工具生成的基础代码框架而言,可以通过图形界面轻松完成上述大部分工作。如果手动编写,则需注意如下几点:
- 配置RCC模块以激活TIMx外设时钟。
- 设置GPIO模式为复用推挽输出以便连接到LED或其他指示灯(可选)。
```c
// 启动HSE并作为PLL源
HAL_RCC_OscConfig(&Rcc_OscInitStruct);
// PLL倍频因子设定等...
HAL_RCC_ClockConfig(&RccClockInitStructure, FLASH_LATENCY_1);
__HAL_RCC_TIM2_CLK_ENABLE(); // 开启TIM2时钟
```
#### 创建定时器实例
接下来定义一个定时器对象,并通过调用`HAL_TIM_Base_Init()`来初始化该定时器。这里假设选择了通用定时器TIM2来进行毫秒级延时操作[^1]。
```c
static TIM_HandleTypeDef htim2;
htim2.Instance = TIM2;
htim2.Init.Prescaler = (SystemCoreClock / 1000) - 1; /* Prescaler value */
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
htim2.Init.Period = 999; /* Auto-reload value */
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
if(HAL_TIM_Base_Init(&htim2)!= HAL_OK){
Error_Handler();
}
/* Start the timer with interrupt enable */
if(HAL_TIM_Base_Start_IT(&htim2) != HAL_OK){
Error_Handler();
}
```
这段代码设置了预分频系数和自动重装载值使得每秒钟发生一次溢出事件,从而实现精确的时间间隔测量。同时开启了中断服务程序用于处理每次周期结束后的回调动作[^3]。
#### 中断服务例程(ISR)
当定时器达到其最大计数值后会产生一个更新事件,进而触发相应的ISR。可以在其中加入自定义逻辑比如点亮LED或发送串行数据包等等。
```c
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
static uint32_t count=0;
if(htim->Instance==TIM2){
count++;
printf("Time elapsed %lu s\n",count);
}
}
```
此部分实现了每当经过一秒时间就打印一条消息至调试终端的功能。实际应用中可根据需求调整具体行为。
阅读全文
相关推荐


















