zoukankan      html  css  js  c++  java
  • stm32 定时器TIM时钟步骤

    1)TIM3 时钟使能 。

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIMx, ENABLE); //时钟使能

    2) 初始化定时器参数,设置自动重装值, 分频系数,计数方式等。

    定时器的初始化函数TIM_TimeBaseInit

    voidTIM_TimeBaseInit(TIM_TypeDef*TIMx,
    TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct); //前面指是哪个TIM,后面指TimeBaseInitStruct结构体指针。

    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;   //定义TIM初始化类型结构体变量

    TIM_TimeBaseStructure.TIM_Period = 5000;   //设置自动重载计数周期值

    TIM_TimeBaseStructure.TIM_Prescaler =7199;   //设置分频系数

    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分频因子

    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //设置为向上计数方式

    TIM_TimeBaseInit(TIMx, &TIM_TimeBaseStructure);  //初始化时钟TIMx

    3) 设置 TIM3_DIER 允许更新中断 。

    void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState)
    第一个参数是选择定时器号,这个容易理解,取值为 TIM1~TIM17
    第二个参数非常关键,是用来指明我们使能的定时器中断的类型,定时器中断的类型有很
    多种,包括更新中断 TIM_IT_Update,触发中断 TIM_IT_Trigger,以及输入捕获中断等等。
    第三个参数就很简单了, 就是失能还是使能 。

    4TIM3 中断优先级设置。

     NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3 中断
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级 0
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级 3
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ 通道被使能
    NVIC_Init(&NVIC_InitStructure); //④初始化 NVIC 寄存器
    TIM_Cmd(TIM3, ENABLE); //⑤使能 TIM3 

    5) 允许 TIMx工作,也就是使能 TIMx

    void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState) ;

    6) 编写中断服务函数。

    在固件库函数里面, 用来读取中断状态寄存器的值判断中断类型的函数是:
    ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t) ;

    固件库中清除中断标志位的函数是:

     void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT) ;

    例如:我们判断定时器3是否发生更新(溢出)中断,并清除中断标志位。

    if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) {

      TIM_ClearITPendingBit(TIM3, TIM_IT_Update );

    }

    //定时器 3 中断服务程序⑥
    void TIM3_IRQHandler(void) //TIM3 中断
    {
    if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查 TIM3 更新中断发生与否
    {
    TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除 TIM3 更新中断标志
    LED1=!LED1;
    }
    }

    知识来源:STM32F1开发指南-库函数版本_V3.1 

  • 相关阅读:
    栈的应用之银行叫号系统模拟
    栈的应用之括号匹配
    栈的应用之数制转换
    线性结构 一元多项式的乘法与加法运算
    Checkpoints codeforces 709B
    寒冰王座 hdu 1248(背包)
    单链表头插法、尾插法(26个字母为例)
    两个有序单链表的合并
    Number Sequence HDU 1711(KMP)
    完成运算
  • 原文地址:https://www.cnblogs.com/zengsf/p/7160928.html
Copyright © 2011-2022 走看看