【ARM课】5-定时中断

1.cubemx设置

参考文章

【STM32】HAL库——定时器溢出中断

时钟设置

高速时钟配置
在这里插入图片描述

将HCLK设置为最大频率72MHz

在这里插入图片描述

定时器设置

在这里插入图片描述
Internal Clock:(内部时钟)
Prtscaler: 3600-1
Counter Mode: Up
Counter Period: 10000-1
CKD:No Division (不分频 )
auto-reload-preload : Enable

NVIC设置

在这里插入图片描述
记得把中断给勾上

2.使用函数

电平翻转
void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)

定时器溢出中断回调函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

时基中断开启函数
HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim)

这个函数用于以下目的:

  • 初始化定时器并开始计时。
  • 当定时器的计数值达到设定的自动重装载寄存器(ARR)的值时,触发中断。
  • 在对应的中断处理函数(比如 HAL_TIM_PeriodElapsedCallback)中执行用户定义的代码

3.定时器基础知识

频率计算

下面是频率计算公式:

f = 主频 ( A R R + 1 ) × ( P S C + 1 ) f = \frac{主频}{(ARR+1) \times (PSC+1)} f=(ARR+1)×(PSC+1)主频

文章把设置主频为72MHz, ARR为10000 -1,PSC为3600 -1,得:

f = 72 , 000 , 000 10000 × 3600 = 2 H z f = \frac{72,000,000}{10000 \times 3600} = 2 Hz f=10000×360072,000,000=2Hz

所以定时周期为0.5s。

计数模式

在这里插入图片描述

  1. 向上计数模式:最常见的模式,计数器从0开始,向上计数到预设的重装载值(ARR),然后重置为0并重新开始计数。这种模式通常用于创建周期性的时间基准。

  2. 向下计数模式:在这种模式下,计数器从预设的重装载值开始,向下计数到0。这种模式在某些特定的应用中比向上计数提供了更好的控制。

  3. 中心对齐模式:定时器的计数器在这种模式下会先向上计数到预设的值,然后向下计数回到0。这种模式可以生成对称的波形,常用于电机控制应用中。

本文采用的是向上计数模式。

4.代码

main函数里开启中断

int main(void)
{
	  /*----------------------- 把语句加到这下面 -----------------------*/
	  /* USER CODE BEGIN 2 */
	  HAL_TIM_Base_Start_IT(&htim6);//开启定时器1
	  /* USER CODE END 2 */
	
	  /* Infinite loop */
	  /* USER CODE BEGIN WHILE */
		while (1) 
		{
	    /* USER CODE END WHILE */
	
	    /* USER CODE BEGIN 3 */
		}
	  /* USER CODE END 3 */
}

定时中断中翻转电平

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if (htim->Instance != htim6.Instance) 
        return;
	HAL_GPIO_TogglePin(LED4_GPIO_Port,LED4_GPIO_PIN);
	HAL_GPIO_TogglePin(LED5_GPIO_Port,LED5_GPIO_PIN);
}

可以在主函数里面,也可以在.c文件里面或者说直接在tim.c文件里面修改该函数。

4.效果展示

5.附

其他几个常用的定时器相关函数

HAL_TIM_Base_Start_IT(&htim1);  //启动定时器
HAL_TIM_Base_Stop_IT(&htim1);   //停止定时器
HAL_TIM_GenerateEvent(TIM_HandleTypeDef *htim, uint32_t EventSource)//通过软件产生更新事件

四种中断

定时器6中断只有1个选项,因此不必过多考虑。但像定时器1,如下图,它有4个选项,我们需要勾选update interrupt,下面是四种中断类型的区别。

在这里插入图片描述

  1. TIM1 break interrupt: 这个中断通常与定时器的高级功能有关,例如电机控制。当定时器的一个错误条件发生(如电机驱动中的死区时间错误),将会触发"break interrupt"。

  2. TIM1 update interrupt: 当定时器的计数器溢出或下溢时(也就是达到了它的重装载值),会触发"update interrupt"。这通常用于周期性任务,如更新变量或切换LED状态。

  3. TIM1 trigger and commutation interrupts: 这些中断用于更复杂的电机控制应用,其中"trigger interrupt"可以同步定时器的操作,而"commutation interrupt"与电机换相有关,特别是在使用无刷直流电机(BLDC)时。

  4. TIM1 capture compare interrupt: 这个中断在定时器的捕获比较寄存器(CCRx)与定时器的计数器匹配时触发。这可以用于精确的时间测量,如测量脉冲宽度或产生精确的时间间隔。

  • 33
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值