stm32f103c8t6最小系统板定时器计时
时间: 2025-01-17 09:58:17 浏览: 53
### STM32F103C8T6 最小系统板定时器计时使用方法
#### 创建定时器初始化函数
为了在STM32F103C8T6最小系统板上使用定时器进行精确计时,首先需要配置并启动定时器。下面是一个简单的例子,展示如何通过定时器2 (TIM2) 来测量一段代码执行所需的时间。
```cpp
// 初始化 TIM2 的函数定义
void TIM2_Init(void){
__HAL_RCC_TIM2_CLK_ENABLE(); // 启用 TIM2 时钟
TIM_HandleTypeDef htim2;
htim2.Instance = TIM2; // 设置实例为 TIM2
htim2.Init.Prescaler = 7999; // 预分频值设定, 假设系统时钟为8MHz
htim2.Init.CounterMode = TIM_COUNTERMODE_UP; // 上升沿计数模式
htim2.Init.Period = 65535; // 自动重装载预置值设置
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
HAL_TIM_Base_Init(&htim2); // 初始化定时器基类成员
}
```
#### 开始与停止计时功能实现
接着定义两个辅助函数用于开启和关闭定时器计时过程:
```cpp
volatile uint32_t start_time = 0;
volatile uint32_t end_time = 0;
// 获取当前定时器数值作为起始时刻标记
void StartTimer(){
start_time = __HAL_TIM_GET_COUNTER(&htim2);
}
// 结束计时并将最终结果保存下来
void StopTimer(){
end_time = __HAL_TIM_GET_COUNTER(&htim2);
}
```
#### 测量特定代码片段耗时的方法
当准备测试某个具体操作耗费了多少时间时,在该段逻辑前后调用上述`StartTimer()` 和 `StopTimer()` 函数即可获取这段时间内的变化差值,从而得知实际消耗的时间长度[^2]。
```cpp
int main(void){
/* ... */
TIM2_Init();
while(1){
// 调试前先清零计数寄存器
__HAL_TIM_SET_COUNTER(&htim2, 0);
StartTimer();
// ====> 这里放置待测代码 <====
StopTimer();
// 输出经过的时间(ms)
printf("Time elapsed: %lu ms\n", ((end_time - start_time)/80));
HAL_Delay(1000); // 模拟延时等待下一循环
}
}
```
这段程序展示了如何利用STM32F103C8T6上的通用定时器(TIM2),并通过串口打印出指定代码块的运行时间。注意这里的除法因子取决于系统的时钟频率以及定时器的预分频系数,因此可能需要根据实际情况调整以获得正确的毫秒级单位表示。
阅读全文
相关推荐


















