定时器介绍

  1. 定时器介绍
    STM32F103C8T6微控制器内部集成了多种类型的定时器,这些定时器在嵌入式系统中扮演着重要角色,用
    于计时、延时、事件触发以及PWM波形生成、脉冲捕获等应用。下面是对STM32F103C8T6中几个定时器的
    简单介绍:
  2. TIM1:这是一个高级定时器,不仅具备基本的定时中断功能,还拥有内外时钟源选择、输入捕获、输
    出比较、编码器接口以及主从触发模式等多种功能。这使得TIM1能够适用于各种复杂的应用场景,为
    开发者提供强大的时间控制和信号处理能力。
  3. TIM2、TIM3和TIM4:这些是通用定时器,同样具有定时功能,但在功能上与高级定时器有所区别。通
    用定时器通常用于实现一些基本的定时任务,如LED闪烁、脉冲宽度测量等。
    每个定时器都由一个16位计数器、预分频器和自动重装寄存器的时基单元组成。预分频器可以对时钟进行分
    频,计数器则对预分频后的时钟进行计数。当计数器的值达到设定值时,会触发中断,从而执行相应的定时
    任务。
  4. 定时器工作原理
    定时器的核心就是计数器。
    在这里插入图片描述
    三种定时器介绍
    在这里插入图片描述
    定时器框图
    基本定时器 只用来计数
    在这里插入图片描述
    通用计数器
    用来输入捕获 输出比较 计数 编码器接口 主从触发模式
    在这里插入图片描述
    简图
    在这里插入图片描述
    高级定时器 包括以上所有功能
    还有三项无刷电机控制功能
    在这里插入图片描述
    定时器计数模式
    在这里插入图片描述
    向上递增计数 就是从0计数到arr 然后归零 继续从0计数到arr
    向下递减计数 从arr减到0 回到arr 继续减到0
    中心对齐计数模式 从
    在这里插入图片描述
    定时器中断点灯 500秒点一次
#include "timer.h"
#include "led.h"
TIM_HandleTypeDef timer_handle = {0};

void timer_init(uint16_t psc,uint16_t arr)
{
    timer_handle.Instance = TIM2;//定时器
    timer_handle.Init.Prescaler = psc;//预分频器
    timer_handle.Init.Period = arr;//周期
    timer_handle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;//自动重装载
    timer_handle.Init.CounterMode =TIM_COUNTERMODE_UP ;//计数器模式
    HAL_TIM_Base_Init(&timer_handle);//时基单元初始化
    HAL_TIM_Base_Start_IT(&timer_handle);//定时器中断状态
}

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)//定时器2服务函数
{
    HAL_TIM_IRQHandler(&timer_handle);//定时器公共服务函数

}

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)//回调函数
{
    if(htim->Instance == TIM2)
    {
        led1_toggle();
    }
}


int main(void)
{
    HAL_Init();                         /* 初始化HAL库 */
    stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
    led_init();
    timer_init(7200-1,5000-1);

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值