stm32f103c8t6最小系统板定时器2
时间: 2024-12-27 12:18:25 浏览: 7
### STM32F103C8T6 最小系统板定时器2使用方法
#### 配置定时器2的基础设置
STM32F103C8T6 的定时器2属于高级控制定时器之一,可以用于多种用途如PWM输出、捕获/比较等。为了配置定时器2,在初始化阶段需设定预分频系数(PSC)及时基单位(Arr),这决定了计数频率以及溢出时间[^1]。
```c
// 初始化TIM2
void TIM2_Init(void){
// 使能GPIOA与时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
// 设置自动重装载值ARR=999,则周期为1ms(假设APB1时钟72MHz)
TIM_TimeBaseStructure.TIM_Period = 999;
// PSC=7199则定时器输入频率为1KHz (72M/(PSC+1))
TIM_TimeBaseStructure.TIM_Prescaler = 7199;
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
// 开启中断并允许更新事件触发中断请求
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
// 启动定时器
TIM_Cmd(TIM2,ENABLE);
}
```
#### 实现延时功能
通过调整上述代码中的`TIM_Period`和`TIM_Prescaler`参数可改变延时时长。当定时器达到指定数值后会产生一个更新事件来通知CPU执行特定的任务或函数。
#### 中断服务程序编写
对于需要精确计时的应用场景来说,通常会利用定时器产生的中断来进行处理:
```c
// 定义全局变量用来记录次数
volatile uint32_t TimingDelay;
// 延迟函数定义
void Delay(__IO uint32_t nTime){
TimingDelay=nTime;
while(TimingDelay!=0);
}
// 更新中断回调函数
void TIM2_IRQHandler(void){
if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET){
if (--TimingDelay == 0){
// 清除标志位
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
}
}
}
```
阅读全文