STM32定时器3定时10ms
时间: 2023-10-19 12:08:11 浏览: 98
STM32定时器
要使用STM32定时器3定时10ms,需要进行以下步骤:
1. 开启定时器3时钟:在RCC_AHB1PeriphClockCmd函数中传入RCC_AHB1Periph_GPIOC参数,启动GPIOC时钟。
2. 配置定时器3:使用TIM_TimeBaseInit函数来配置定时器3,设置定时器3的时钟频率、计数器值和预分频值。
3. 启动定时器3:使用TIM_Cmd函数启动定时器3。
4. 编写定时器3中断服务函数:在中断服务函数中实现10ms的定时,可以在中断服务函数中设置一个计数器,每计数到100就认为已经过了10ms,然后重置计数器。
以下是一个示例代码:
```
#include "stm32f4xx.h"
void TIM3_IRQHandler(void)
{
static uint32_t counter = 0;
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
{
counter++;
if (counter == 100)
{
// 10ms interval
counter = 0;
// do something here
}
TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
}
}
void TIM3_Config(void)
{
TIM_TimeBaseInitTypeDef TIM_InitStruct;
NVIC_InitTypeDef NVIC_InitStruct;
// enable clock for TIM3
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
// configure TIM3
TIM_InitStruct.TIM_Prescaler = 8400 - 1; // 84MHz / 8400 = 10kHz
TIM_InitStruct.TIM_CounterMode = TIM_CounterMode_Up;
TIM_InitStruct.TIM_Period = 100 - 1; // 10kHz / 100 = 100Hz = 10ms
TIM_InitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM3, &TIM_InitStruct);
// enable TIM3 interrupt
NVIC_InitStruct.NVIC_IRQChannel = TIM3_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStruct);
// start TIM3
TIM_Cmd(TIM3, ENABLE);
// enable TIM3 update interrupt
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
}
int main(void)
{
TIM3_Config();
while (1)
{
// do something here
}
}
```
阅读全文