STM32的HAL库有个简单的计时,默认使用systick,只是实现简单的毫秒级延迟,我们用定时器搞个稍微准点的延迟,我们用基本定时器,TIM6,我们实现一个500ms产生一次中断,然后每LED状态变换一下首先咱们配置下时钟
    
默认的是16MHz

我们直接傻子玩法,直接填64回车,让它自己配置

OK,很不戳(详细的配置及原理大Z老师已经讲过了,咱就不多说了)
打开定时器
下边我们计算一下,计算公式 f = tclk/(prescaler+1)/(period+1) f:频率 tclk:时钟频率 prescaler:预分频 period:自动加载值 1ms一次中断 f=1000; 64000000/32000/1000=1000

优先级

跟EXTI中断一样

这里我们用周期运行回调函数,继续点灯
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* tim_baseHandle)//周期运行回调,配置定时进入中断
{
    if(tim_baseHandle->Instance == htim6.Instance)
    {
        /* Toggle LED */
    	HAL_GPIO_TogglePin(LED_GREEN_GPIO_Port,LED_GREEN_Pin);
    }
}然后在main函数里添加启动
HAL_TIM_Base_Start_IT(&htim6);
用逻辑分析仪抓一下引脚看看时间准不准

看起来效果挺好的

 
					
				 
						
 
			
			
			
						
			 
					
				 
					
				
 
					
				 我要赚赏金
 我要赚赏金 STM32
STM32 MCU
MCU 通讯及无线技术
通讯及无线技术 物联网技术
物联网技术 电子DIY
电子DIY 板卡试用
板卡试用 基础知识
基础知识 软件与操作系统
软件与操作系统 我爱生活
我爱生活 小e食堂
小e食堂

