定时器中断,定时器3
1、STM32CubeMX引脚设置和代码生成
1.相关定时器的知识点:
STM32F1系列中APB1和APB2控制对应表
APB1操作速度限于36MHz
APB2操作于全速(最高72MHz)
APB1(低速外设)
:DA,USB,SPI,I2C,CAN,串口2345,普通TIM
APB2(高速外设)
:AD,I/O,高级TIM,串口1
2.外部时钟晶振选择:
在STM32CubeMX软件中,配置相对应模式,选择RCC
进行配置相关的晶振选择及电路时钟选择。选择高速时钟HSE
,然后选择第三项的外部晶振源
。
3.时钟配置选择:
在STM32CubeMX软件上侧,选择Clock Configuration
时钟设置项,根据下图进行配置相对应的时钟选项设置。
4.定时器相关参数选择:
在STM32CubeMX软件右侧:
1)选择Times
定时器设置项,根据下图进行配置相对应的定时器相关参数的设置。
(选择内部时钟源、设置预分频、计数值、打开定时器中断使能)
定时器频率=时钟频率/(预分频*计数值)
T i m e s ( H z ) = I n t e r n e l C l o c k ( M H z ) P S C ∗ C o u n t e r . Times(Hz) = \frac{InternelClock(MHz)}{PSC*Counter}. Times(Hz)=PSC∗CounterInternelClock(MHz).
例如:下面图中设置的定时器3中断的频率为1Hz
其中内部时钟频率为APB1(InternelClock)
频率为72MHz(根据时钟树看出)
预分频(PSC)
:7200-1; 计数值(Counter)
:10000-1;(计数从0开始,所以要减1)
定 时 器 3 中 断 频 率 = 72000000 7200 ∗ 10000 = 1 H z 定时器3中断频率= \frac{72000000}{7200*10000}=1Hz 定时器3中断频率=7200∗1000072000000=1Hz
2)选择System Core
项,点击NVIC
项,设置定时器中断优先等级
和使能
,避免中断过高产生不必要的抢占。
根据下图进行配置相对应的定时器相关参数的设置
5.在STM32CubeMX软件右上角,点击GEBERATE CODE项,生成代码。
外部晶振选择:
相对应的时钟设置:
设置定时器3的参数设置:
定时器3中断优先等级设置:
2、编写相关中断的C文件
1.相关中断函数:
相关的中断函数在stm32f1xx_hal_tim.c文件中可以查看得到。
在HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim)
这个函数中,我们可以看到相关中断函数的处理。该函数必须在main.c函数中进行开启使用
,这样才能开启定时器中断软件使能。
相关的中断函数在stm32f1xx_it.c文件中可以查看得到。
在void TIM3_IRQHandler(void)
这个函数中,我们可以看到相关中断函数的处理。
相关的定时器中断函数在stm32f1xx_hal_tim.c文件中可以查看得到。
在HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
这个函数中,相关的中断函数的处理将会在该函数中执行。
2.相关中断函数的编写:
1)添加定时器3中断开启使能函数,放置于到main.c
中的用户代码区。
/* USER CODE BEGIN 2 */
HAL_TIM_Base_Start_IT(&htim3);
/* USER CODE END 2 */
2)将相关的HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
复制到main.c
中的用户代码区进行编写,当然也可以建立相关的time3_ti.h
time3_ti.c
相关定时器3中断函数处理c文件。
注释:该函数会在计数器溢出时进行执行。
/* USER CODE BEGIN 4 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM3)
{
LED0_Toggle;
LED1_Toggle;
}
}
/* USER CODE END 4 */
3、编译工程文件,使用ST-Link烧录,测试定时器中断
两盏LED灯会根据定时器3中断时间进行闪烁,定时器3中断的频率为1Hz,也就是一秒钟LED灯会闪烁一次。