网站主机租用多少钱,淘宝客户自己做网站怎么做,网站主页面布局怎么做,聚美优品网站开发时间进度表一、实验目的 使用定时器 2 进行中断点灯#xff0c;500ms LED 灯翻转一次。
二#xff0c;定时器溢出时间计算 Tout#xff1a;定时器溢出时间 Ft#xff1a;定时器的时钟源频率 ARR#xff1a;自动重装载寄存器的值#xff08;可设置ARR从0开始#xff0c;但是计数到…一、实验目的 使用定时器 2 进行中断点灯500ms LED 灯翻转一次。
二定时器溢出时间计算 Tout定时器溢出时间 Ft定时器的时钟源频率 ARR自动重装载寄存器的值可设置ARR从0开始但是计数到1才会中断不可能出现到0就中断所有要1取值范围为“1-2^16”1-65535 PSC预分频器寄存器的值如果设置1分频那么PSC0,PSC1 1,所以1分频就是psc1,2分频就是psc11,取值范围为“1-2^16”1-65535 Ft/(psc1) 分频之后的时钟频率而周期等于频率的倒数所以1个计数周期也就是1个计数的时间等于psc1/Ft
(ARR1) 需要记多少个数
个数*时间 (ARR1)*(psc1/Ft 定时器溢出时间
注意一般情况下我们喜欢把(psc1设置成Ft的倍数所以当Ft是72MHZ时psc17200(注意取值范围哦)
例如要定时 500ms则Ft72MPSC7199喜欢设置成倍数则ARR4999
倒推72M 72000 000
5000*7200/72000 000 5/10 0.5s 500ms
三、定时器中断实验配置步骤 msp 函数是对 MCU 相关的硬件进行初始化设置通常被设计用于处理特定硬件外设或功能的底层初始化工作 四、开始配置
复制项目文件03-流水灯重命名为17-定时器中断点灯
在Drivers\BSP目录下新建文件夹timertimer.c和timer.h
加载文件 编译 编译 代码
main.c
#include sys.h
#include delay.h
#include led.h
#include timer.hint main(void)
{HAL_Init(); /* 初始化HAL库 */stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */led_init();//初始化led灯timer_init(5000-1,7200-1);
// led1_ON();
// led1_OFF();while(1){ }
}timer.c
#include timer.h
#include led.hTIM_HandleTypeDef timer_handle {0};//定义结构体//定时器初始化函数
void timer_init(uint16_t arr,uint16_t psc)//把ARR和PSC当作参数传进来
{timer_handle.Instance TIM2; //选择使用的定时器timer_handle.Init.Prescaler psc; //PSCtimer_handle.Init.Period arr; //ARRtimer_handle.Init.CounterMode TIM_COUNTERMODE_UP;//配置成向上的默认向上的timer_handle.Init.AutoReloadPreload TIM_AUTORELOAD_PRELOAD_DISABLE; //自动重装载默认自动重装载HAL_TIM_Base_Init(timer_handle);HAL_TIM_Base_Start_IT(timer_handle);//设置使能更新中断和启动计数器
}//msp函数
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
{if(htim-Instance TIM2){__HAL_RCC_TIM2_CLK_ENABLE();HAL_NVIC_SetPriority(TIM2_IRQn,2,2);//设置优先级HAL_NVIC_EnableIRQ(TIM2_IRQn);//设置使能中断}
}//中断服务函数
void TIM2_IRQHandler(void)
{//一般还会调用一个公共处理的服务函数HAL_TIM_IRQHandler(timer_handle); }
//更新中断回调函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim-Instance TIM2){led1_Toggle();}
}
timer.h
#ifndef __TIMER_H__
#define __TIMER_H__#include sys.hvoid timer_init(uint16_t arr,uint16_t psc);#endif