演示视频:B站 - STM32计数器记数实验
一、 项目简介
本实验基于 STM32F103,利用 TIM2定时器外设 实现计数器功能,通过 中断机制 记录次数,并将当前计数值显示在 OLED 上。该项目适合初学者学习 定时器中断、计数器模式、数码显示 的综合应用。
功能简述:
-
定时器每发生一次 更新中断 ,变量
Num
自增 -
OLED 实时显示 Num值 和 TIM2计数器值
二、 开发环境与硬件说明
项目 | 内容 |
---|---|
MCU | STM32F103C8T6 |
工具链 | Keil uVision5 + ST-Link下载器 |
显示模块 | 0.96寸OLED I2C接口 |
外设 | TIM2定时器 |

三、主函数代码
cpp
#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "OLED.h"
#include "Timer.h"
uint16_t Num;
int main(){
OLED_Init();
Timer_Init();
OLED_ShowString(1,1,"Num:");
while(1){
OLED_ShowNum(1,5,Num,5);
OLED_ShowNum(2,5,TIM_GetCounter(TIM2),5);
}
}
void TIM2_IRQHandler(void){
if(TIM_GetITStatus(TIM2,TIM_IT_Update)==SET){
Num++;
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
}
}
四、实现逻辑解析
-
定时器配置
-
预分频值
7200-1
,分频后时钟 = 10kHz -
自动重装载值
10000-1
,溢出周期 = 1秒
-
-
中断处理
- 每秒触发一次
TIM2_IRQHandler
,Num++
- 每秒触发一次
-
OLED显示
-
第一行显示
Num
(中断计数) -
第二行显示
TIM2
当前计数器值
-
五、知识点总结
知识点 | 说明 |
---|---|
定时器基本模式 | 向上计数,到达 ARR 产生更新中断 |
NVIC配置 | 使能TIM2中断,设置优先级 |
OLED显示 | 通过I2C驱动,实时刷新计数值 |