STM32
直播中

南中南

8年用户 937经验值
擅长:光电显示
私信 关注
[问答]

STM32基本定时器TIM6及TIM7的功能是什么?

STM32基本定时器tiM6及TIM7的功能是什么?

回帖(1)

何柳青

2021-11-24 11:20:53
所用工具:1、芯片:STM32F103ZET6
                   2、CUBEMX软件
                   3、MDK-keil软件
定时器简介:STM32F103ZET6 一共有8个定时器,其中TIM1/TIM8为高级定时器,TIM6/TIM7为基本定时器,TIM2,TIM3,TIM4,TIM5为通用定时器。
基本定时器TIM6及TIM7功能:





通用定时器TIM2~TIM5功能:





                             
高级定时器TIM1/TIM8功能:





本次学习利用基本定时器TIM6的定时技术功能,每隔1秒钟翻转GPIO指示灯。
一、设置RCC
设置高速外部时钟HSE作为时钟源。





选择Crystal/Ceramic Resonator 外部晶体/陶瓷晶振器作为时钟源。
HSE两个时钟源选项说明如下:
BYPASS Clock Source(旁路时钟源)
Crystal/Ceramic Resonator(晶体/陶瓷晶振)

所谓HSE旁路时钟源,是指无需使用外部晶体时所需的芯片内部时钟驱动组件,直接从外界导入时钟信号。犹如芯片内部的驱动组件被旁路了。
外部晶体/陶瓷谐振器(HSE晶体)模式该时钟源是由外部无源晶体与MCU内部时钟驱动电路共同配合形成,有一定的启动时间,精度较高。
二、设置时钟分频






1、选择外部时钟HSE 8MHz
2、系统时钟来源选择PLLCLK
3、设置HCLK为72MHz
三、定时器设置





1、选择定时器TIM6,
2、定时器使能,勾选Activated
3、设置定时器参数  ①、设置分频系数7200
                                 ②、选择向上计数模式 up
                                 ③、设置重装载值 5000
                                 ④、自动重装载使能
定时器溢出时间计算:溢出时间=重装载值×分频系数/72M
例如:分频系数7200,定时器时钟频率为72M/7200=10000Hz,重转载值5000,那么溢出时间为5000/10000=0.5s
四、使能定时器中断功能





1、选择中断功能设置
2、勾选使能TIM6定时器中断
五、配置相应的GPIO口






1、设置PB5及PE5 初始化电平高,推挽输出,无上/下拉,输出频率低。
六、配置项目文件





填写工程名称、存放路径及IDE工具选择MDK等

七、工程函数
在HAL库中,定时器产生中断时,首先进入stm32f1xx.it.c文件中的TIM6中断函数:






在TIM6-IRQHandler函数中又调用了 HAL_TIM_IRQHandler()函数,进入HAL_TIM_IRQHandler()函数的定时器更新中断代码中我们看到:





这里判断产生了中断后,清除了中断标志位,又调用了HAL_TIM_PeriodElapsedCallback(htim)函数,最后进入回调函数中,





我们只需要重写回调函数,在回调函数中编写用户代码。
1、在用户变量定义去添加变量i定义,并初始化i=0(此变量定义及初始化不能放在中断回调函数中)。
2、在main函数中添加定时器中断开启函数。
HAL_TIM_Base_Start_IT(&htim6);   //开启定时器6中断
3、在用户代码区添加定时器中断回调函数
void  HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)    //定时器中断回调函数
  {
     
     if(htim == &htim6)   //确定是定时器6产生的中断
     {
        i++;
        if(i==2)
        {
            HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5);
            i=0;
        }
     }
        
  }
举报

更多回帖

发帖
×
20
完善资料,
赚取积分