基本定时器

1.基本定时器

1.1概述

基本定时器 TIM6 和 TIM7 包含一个16 位自动重载递增计数器,该计数器由可编程预分频器驱动。此类定时器不仅可用作通用定时器以生成时基,还可以专门用于驱动数模转换器 (DAC)。实际上,此类定时器内部连接到DAC 并能够通过其触发输出驱动DAC。

1.2特征

① 16 位自动重载递增计数器

② 16 位可编程预分频器,用于对计数器时钟频率进行分频,分频系数介于 1 和 65536 之间

③ 用于触发 DAC 的同步电路

④ 发生如下更新事件时会生成中断/DMA 请求:计数器上溢

1.3时基单元

  1. 计数器寄存器:用来对脉冲信号进行计数的,可以从零开始计数,也可以自行设定从几开始,计数到与自动重装载寄存器的值一致时,会产生溢出更新。

  1. 预分频寄存器:对系统时钟频率进行分频。例如:预分频系数是X,则对系统时钟频率进行x+1分频,也就是说每x+1个脉冲,计数器加一

  1. 自动重装载寄存器:设置计数器计数的上限值,也就是设置定时周期

2.寄存器(stm32f4xx)

2.1 控制寄存器1 (TIMx_CR1)

寄存器作用:

【7】:用来选择是否使用ARR的影子寄存器

0:自动重载预装载寄存器没有影子功能(不存在影子寄存器),相当于二者重叠。

1:自动重载预装载寄出去启动影子功能(存在影子寄存器)。

【3】:单脉冲模式

0:计数器在发生更新事件时不会停止计数(循环计数)

1:计数器在发生下一更新事件时停止计数(将 CEN 位清零)(单次计数)

【2】:更新请求源 (Update request source)

此位由软件置 1 和清零,用以选择 UEV 事件源。

0:使能时,所有以下事件都会生成更新中断或 DMA 请求。此类事件包括:

—计数器上溢/下溢

—将 UG 位置 1

—通过从模式控制器生成的更新事件

1:使能时,只有计数器上溢/下溢会生成更新中断或 DMA 请求。

选择哪种事件会引起更新

【1】:更新禁止 (Update disable)

1:禁止更新 0:允许更新

【0】:计数器使能位

1:开启计数器

0:关闭计数器

注意:第0位(使能位)要在所有的设置进行完毕之后再开启

2.2状态寄存器(TIMx_SR)

用来查看事件有没有发生,由硬件自动置一,但需要手动(软件)清零

2.3事件生成寄存器 (TIMx_EGR)

手动产生更新事件

2.4计数器 (TIMx_CNT)

用来对系统时钟脉冲计数,到计的数到达上限,会重新归零并产生更新事件,16位计数器,计数范围:0~65535。

2.5预分频器 (TIMx_PSC)

用来对时钟频率进行分频,使计数器在PSC+1个脉冲下计一次数,分频值范围:1~65536。

2.6 自动重载寄存器 (TIMx_ARR)

用来设置计数器计数的上限值,ARR的值为0时,计数器不工作。

3.编程

3.1寄存器

void Time_6_Init(u16 psc,u16 arr)
{
    //1、开启定时6的时钟
    RCC->APB1ENR |= 1 << 4;
    
    //2、配置定时器工作模式
    TIM6->CR1 &= ~(1 << 7);//自动重装载寄存器与影子寄存器合二为一
    TIM6->CR1 &= ~(1 << 3);//使用循环计数
    TIM6->CR1 &= ~(1 << 2);//配置更新请求源
    TIM6->CR1 &= ~(1 << 1);//允许更新
    //3、配置时基单元
    TIM6->CNT = 0;         //从零开始计数
    TIM6->PSC = psc - 1;   //设置预分频系数
    TIM6->ARR = arr;       //设置上限值
    //4、手动更新
    TIM6->EGR |= 1 << 0;   //此位硬件自动清零
    //5、清除状态寄存器的值
    TIM6->SR &= ~(1 << 0); 
    //6、开启计数器
    TIM6->CR1 |= 1 << 0;
    //7、等待状态寄存器为1
    while((TIM6->SR & (1 << 0)) == 0);
    //8、关闭计数器
    TIM6->CR1 &= ~(1 << 0);
}

3.2库函数

void Tim4_Init(void)
{
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    /*1.开时钟TIM6*/
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE);
    /*2.配置定时器工作模式*/
    TIM_ARRPreloadConfig(TIM6,ENABLE);     //自动重装载寄存器和影子不合二为一
    TIM_SelectOnePulseMode(TIM6,TIM_OPMode_Repetitive);     //使用循环计数
    TIM_UpdateRequestConfig(TIM6,TIM_UpdateSource_Global);   //允许所有的更新请求源
    TIM_UpdateDisableConfig(TIM6,DISABLE);                  //允许更新
    /*3.配置时基单元*/
    TIM_TimeBaseStructure.TIM_Period = arr;                 //设置上限值(重装载值) 
    TIM_TimeBaseStructure.TIM_Prescaler = per;             //设置预分频系数
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数 
    TIM_TimeBaseInit(TIM6,&TIM_TimeBaseStructure);
    /*4.手动更新*/
    TIM_GenerateEvent(TIM6,TIM_EventSource_Update);
    /*5.清除更新标志位*/
    TIM_ClearFlag(TIM6,TIM_FLAG_Update);
    TIM_SetCounter(TIM6,0);           //清空计数器
    /*6.开启定时器计数器*/
    TIM_Cmd(TIM6,ENABLE);
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基本定时器和高级定时器是STM32系列中的两种不同类型的定时器基本定时器包括16位定时器和24位定时器,而高级定时器则是32位定时器。\[1\] 基本定时器具有以下特点: - 16位自动重装载累加计数器 - 16位可编程预分频器,用于对输入的时钟进行分频 - 可触发触发DAC的同步电路(仅限于TIM6和TIM7) - 在更新事件(计数器溢出)时可以产生中断或DMA请求\[3\] 高级定时器具有以下特点: - 32位自动重装载累加计数器 - 16位可编程预分频器,用于对输入的时钟进行分频 - 支持更复杂的定时器功能,如输入捕获、输出比较和PWM生成等 - 可以与其他外设进行同步操作 - 可以产生更多的中断和DMA请求\[2\] 总的来说,基本定时器适用于简单的定时和计数任务,而高级定时器则适用于更复杂的定时和控制任务。具体选择哪种定时器取决于应用的需求和所需的功能。 #### 引用[.reference_title] - *1* [基本、通用、高级定时器之间的区别](https://blog.csdn.net/dfvcx2580/article/details/124165013)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [STM32 第17讲 定时器概述(基本定时器/通用定时器/高级定时器概述)](https://blog.csdn.net/weixin_46387554/article/details/128725710)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [STM32F1系列基本定时器、通用定时器、高级定时器的区别](https://blog.csdn.net/m0_46446907/article/details/123574052)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值