STM32学习-33-[定时器]自制延迟函数

获取单片机的当前时间

image

利用定时器实现1ms执行一次中断并将currenttick的值自增

实现延时函数

image

初始化时基单元

image

void App_TIM3_TimeBaseInit(void){
	// 开启定时器3的时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

	// 配置时基单元的参数
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	TIM_TimeBaseInitStruct.TIM_Prescaler = 71;
	TIM_TimeBaseInitStruct.TIM_Period = 999;
	TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseInitStruct.TIM_RepertitionCounter = 0;

	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStruct); 

	// 闭合时基单元的总开关
	TIM_Cmd(TIM3, ENABLE);

配置中断

image

	// 使能update中断
	TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);

	// 配置NVIC模块(使用中断就要配置NVIC)
	NVIC_InitTypeDef NVIC_InitStruct;

	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);

编写中断响应函数

查看中断函数
image

image

void TIM3_IRQHandler(void){
	if(TIM_GetFLagStatus(TIM3, TIM_FLAG_Update) == SET){ 
		// 查标志位
		TIM_CLearFLag(TIM3, TIM_FLAG_Update);	// 清标志位
		currentTick++;
	}
}
posted @ 2026-09-02 14:47  灵垚克府  阅读(9)  评论(0)    收藏  举报