使用标准库写一段stm32f103c8t6定时器一的1ms中断定时
时间: 2023-09-02 12:05:48 浏览: 119
STM32F103标准库开发-定时器中断实验
5星 · 资源好评率100%
以下是使用标准库写的stm32f103c8t6定时器一的1ms中断定时的代码:
```c
#include "stm32f10x.h"
void TIM1_UP_IRQHandler(void)
{
if (TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET)
{
// 在这里编写定时器中断处理程序
// ...
TIM_ClearITPendingBit(TIM1, TIM_IT_Update);
}
}
void TIM1_Config(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.TIM_Period = 999; // 1ms
TIM_TimeBaseStructure.TIM_Prescaler = 71; // 1MHz时钟
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE);
TIM_Cmd(TIM1, ENABLE);
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
int main(void)
{
TIM1_Config();
while (1)
{
// 在这里编写主程序
// ...
}
}
```
在这段代码中,我们使用了定时器1来实现1ms的定时。在`TIM1_Config()`函数中,我们首先使能了定时器1的时钟,并对定时器1进行了基本的配置。由于MCU的时钟频率为72MHz,因此我们将定时器1的预分频器设置为71,这样定时器的时钟频率就为1MHz。然后我们将定时器1的计数模式设置为向上计数,并将定时器1的周期设置为999,这样定时器1每计数到999时就会产生一次中断,从而实现1ms的定时。接着,我们使能了定时器1的更新中断,并开启了定时器1的计数。最后,我们使用NVIC_Init函数初始化中断向量表,并开启定时器1的更新中断。
在`TIM1_UP_IRQHandler()`函数中,我们编写定时器中断处理程序。在这个程序中,我们可以编写任何需要定时处理的代码。在本例中,我们只是简单地清除了定时器1的中断标志位。
在`main()`函数中,我们调用`TIM1_Config()`函数来配置定时器1,并在主程序中编写其他需要执行的代码。
阅读全文