stm32F103定时器
时间: 2023-07-06 18:04:03 浏览: 79
stm32f103时钟
STM32F103系列微控制器包含多个定时器,其中最常用的是基本定时器(TIM2-TIM5)和通用定时器(TIM1和TIM8)。这些定时器可以用于计时、PWM输出、捕捉输入等应用。
以下是使用基本定时器(TIM2-TIM5)的步骤:
1. 使能定时器时钟:在RCC寄存器中设置对应定时器的时钟使能位。
2. 配置定时器的计数模式:选择向上计数或向下计数模式,并设置预分频器和计数器重载值。
3. 启动定时器:在CR1寄存器中设置定时器使能位。
4. 等待定时器溢出:在SR寄存器中检查定时器溢出标志位是否被置位。
5. 清除定时器溢出标志位:在SR寄存器中清除定时器溢出标志位。
以下是一个使用TIM2定时器实现每秒钟闪烁一次LED的示例代码:
```c
#include "stm32f10x.h"
void TIM2_IRQHandler(void)
{
if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //判断是否为定时器溢出中断
{
GPIO_WriteBit(GPIOC, GPIO_Pin_13, (BitAction)(1-GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_13))); //翻转LED状态
TIM_ClearITPendingBit(TIM2, TIM_IT_Update); //清除中断标志位
}
}
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //使能GPIOC时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //使能TIM2时钟
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure); //初始化GPIOC13
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Period = 999; //计数周期为1000
TIM_TimeBaseStructure.TIM_Prescaler = 7199; //预分频器为7200,定时器时钟为72MHz/7200=10kHz
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //初始化TIM2
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); //开启定时器溢出中断
NVIC_EnableIRQ(TIM2_IRQn); //使能TIM2中断
TIM_Cmd(TIM2, ENABLE); //启动TIM2
while(1);
}
```
在该示例代码中,TIM2定时器被配置为10kHz的向上计数模式,计数周期为1000,因此定时器将每100ms溢出一次。在定时器溢出中断服务函数中翻转LED状态,并清除定时器溢出标志位。
阅读全文