stm32f103c8t6实现倒计时的代码
时间: 2023-09-17 08:08:17 浏览: 227
STM32F103C8T6中文资料.rar_STM32F103C8T6中文资料_stm32f103c8 中文_stm32f103
5星 · 资源好评率100%
以下是一个简单的倒计时功能实现例程,使用了STM32F103C8T6芯片的定时器功能:
#include "stm32f10x.h"
#include <stdio.h>
uint16_t TIM2_CounterValue = 0; // 定义计数器值
void TIM2_IRQHandler(void) // 定时器中断服务函数
{
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM2, TIM_FLAG_Update);
if (TIM2_CounterValue > 0)
{
TIM2_CounterValue--; // 计数器每秒递减一次
printf("Remaining time: %d\n", TIM2_CounterValue);
}
else
{
printf("Time's up!\n");
}
}
}
void init_TIM2(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM_TimeBaseStructure.TIM_Period = 999; // 按照1ms定时
TIM_TimeBaseStructure.TIM_Prescaler = 7199; // 时钟为72MHz,预分频为7200,计数器频率为10kHz
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); // 允许更新中断
TIM_Cmd(TIM2, ENABLE); // 启动计数器
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure); // 初始化中断向量表
}
int main(void)
{
SystemInit(); // 系统初始化
init_TIM2(); // 初始化定时器
TIM2_CounterValue = 60; // 设置定时器初值为60秒
while (1)
{
// do something else
}
return 0;
}
请注意,在实际应用中,您应该根据您的要求自定义计数器值和计时方式。
阅读全文