zoukankan      html  css  js  c++  java
  • stm32 定时器 通用定时器

    STM32F10xxx

    2个基本定时器(TIM6、TIM7)
    4个通用定时器(TIM2、 TIM3、 TIM4和TIM5)
    2个高级定时器(TIM1、TIM8)

    每个定时器都是完全独立的,没有互相共享任何资源。它们可以一起同步操作

    TIMx主要功能

    16位向上、向下、向上/向下自动装载计数器
    16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65536之间的任意
    数值
    4个独立通道:
    ─ 输入捕获
    ─ 输出比较
    ─ PWM生成(边缘或中间对齐模式)
    ─ 单脉冲模式输出
    使用外部信号控制定时器和定时器互连的同步电路
    如下事件发生时产生中断/DMA:
    ─ 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
    ─ 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
    ─ 输入捕获
    ─ 输出比较
    支持针对定位的增量(正交)编码器和霍尔传感器电路
    触发输入作为外部时钟或者按周期的电流管理

    TIMx配置步骤

    1.使能定时器时钟
    2.初始化定时器参数,预分频器的值、自动重装载的值等设定
    3.设置定时器中断类型
    4.初始化NVIC外设,设置定时器中断优先级
    5.开启定时器
    6.编写定时器处理函数

    举例

    void TIM4_IRQHandler()
    {
        if(TIM_GetITStatus(TIM4, TIM_IT_Update) == 1)
        {
            delay_ms(10);
    
            led1 = ~led1;
        }
    
        TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
    } 
    
    typedef struct
    {
        uint16_t TIM_Prescaler; //预分频器的值
        uint16_t TIM_CounterMode; //计数模式
        uint16_t TIM_Period; //自动重装载的值 
        uint16_t TIM_ClockDivision; //时钟分频
        uint8_t TIM_RepetitionCounter; //重复计数器
    } TIM_TimeBaseInitTypeDef;   
    
    void TIM4_init(u16 per, u16 pre)
    {
        TIM_TimeBaseInitTypeDef tim = {0};
    
        NVIC_InitTypeDef nvic = 
        {
            TIM4_IRQn,
            2,
            2,
            ENABLE
        };
    
        tim.TIM_Prescaler = pre;
        tim.TIM_CounterMode = TIM_CounterMode_Up; //计数器向上计数,常用
        tim.TIM_Period = per;
        tim.TIM_ClockDivision = TIM_CKD_DIV1; //时钟1分频
    
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //使能定时器时钟
    
        TIM_TimeBaseInit(TIM4, &tim); //初始化定时器参数
    
        TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE); //设置定时器中断类型,发生哪种事件
    
        NVIC_Init(&nvic); //初始化NVIC
    
        TIM_ClearFlag(TIM4, TIM_IT_Update); //清中断
    
        TIM_Cmd(TIM4, ENABLE); //开启定时器
    }

    定时器定时时间计算

    Tout = ((Period)*(Prescaler+1))/Tclk; //mb == us
    500000 = (1000 * 36000)/72  //500000um
  • 相关阅读:
    Atitit 人脸识别 眼睛形态 attilax总结
    Atitit 手机号码选号 规范 流程 attilax总结 v2 r99.docx
    atitit 板块分类 上市公司 龙头企业公司 列表 attilax总结.docx
    Atititi atiitt eam pam资产管理 购物表去年.xlsx
    使用cmd查看电脑连接过的wifi密码(一)
    常见十大web攻击手段 悟寰轩
    常见web攻击方式 悟寰轩
    【MYSQL数据库】MYSQL学习笔记mysql分区基本操作 悟寰轩
    Filter及FilterChain的使用详解 悟寰轩
    启动tomcat spring初始化两次问题(eg:@PostConstruct) 悟寰轩
  • 原文地址:https://www.cnblogs.com/zhangxuechao/p/11709575.html
Copyright © 2011-2022 走看看