STM32学习-33-[定时器]自制延迟函数
获取单片机的当前时间

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

初始化时基单元

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);
配置中断

// 使能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);
编写中断响应函数
查看中断函数


void TIM3_IRQHandler(void){
if(TIM_GetFLagStatus(TIM3, TIM_FLAG_Update) == SET){
// 查标志位
TIM_CLearFLag(TIM3, TIM_FLAG_Update); // 清标志位
currentTick++;
}
}

浙公网安备 33010602011771号