stm32f103的60秒倒计时主函数代码
时间: 2023-09-17 17:07:57 浏览: 91
以下是一个简单的60秒倒计时的主函数代码,使用了定时器中断和延时函数:
```c
#include "stm32f10x.h"
uint8_t seconds = 60;
void TIM2_IRQHandler(void) {
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) {
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
seconds--;
}
}
void delay_ms(uint32_t ms) {
volatile uint32_t nCount;
RCC_ClocksTypeDef RCC_Clocks;
RCC_GetClocksFreq(&RCC_Clocks);
nCount = (RCC_Clocks.HCLK_Frequency / 10000) * ms;
for (; nCount != 0; nCount--);
}
int main(void) {
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Period = 999;
TIM_TimeBaseStructure.TIM_Prescaler = 7199;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
NVIC_EnableIRQ(TIM2_IRQn);
TIM_Cmd(TIM2, ENABLE);
while (1) {
delay_ms(1000);
if (seconds == 0) {
// do something
break;
}
}
while (1);
}
```
在这个代码中,我们使用了STM32F103的定时器2来实现60秒倒计时。我们通过设置定时器的周期为999和预分频器为7199来让定时器每1秒钟产生一个中断。在中断处理函数中,我们将秒数减1。在主函数中,我们使用延时函数来让程序每1秒钟执行一次,同时检查秒数是否为0,如果为0则退出循环,实现了60秒倒计时的功能。
阅读全文