Timer (計時器) 就是慢慢數時間,在timer內部有一個計數器。

而計數器會數到Register的value當數值數到設定值Timer就會發起IRQ

而程式就會轉跳到中斷向量裡頭去執行想要做的事情。

Timer 計時器配置

 TIM_TimeBaseInitTypeDef TIM3_TimeBase;
TIM3_TimeBase.TIM_ClockDivision = ;
TIM3_TimeBase.TIM_CounterMode = TIM_CounterMode_Up;
TIM3_TimeBase.TIM_Period = ;
TIM3_TimeBase.TIM_Prescaler = - ;
TIM_TimeBaseInit(TIM3, &TIM3_TimeBase);
TIM_Cmd(TIM3, ENABLE);
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);

在這段配置裡頭比較重要的是知道啟動Timer的輸入頻率,以及Timer的計數頻率,與設定的週期

有了這些資訊之後我們就知道如何去觸發Timer 的 IRQ

這邊提及一下Timer的輸入頻率跟RCC配置有相關,我們透過Clock Tree可以知道假設啟動Timer的APBx (x = 1/2)

有設定除頻的話,Timer的輸入頻率會是APBx * 2

STM32F407 System clock = 168MHz

APB2 = 42MHz, APB2 = 84MHz

所以我們的初始設定TIM3輸入頻率是 42MHz * 2 = 84MHz

 /* HCLK = SYSCLK / 1*/
RCC->CFGR |= RCC_CFGR_HPRE_DIV1; /* PCLK2 = HCLK / 2*/
RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; /* PCLK1 = HCLK / 4*/
RCC->CFGR |= RCC_CFGR_PPRE1_DIV4;

這段程式碼在startup_stm32f4xx.s 已經先配置過一次RCC所以在初始狀態APB1/2頻率如上敘述。

回到Timer多久觸發一次IRQ的計算,目前已知最重要的輸入頻率所以接下來的計算都是靠我們設定的Register去計算

首先在配置IRQ觸發頻率時,通常我們會先確定要用怎樣的頻率去計數這段時間。所以我們會去配置除頻系數

TIM3_TimeBase.TIM_Prescaler = - ;

以這行程式碼而言,我的除頻系數填的是83而我的計數頻率會變成1Mhz

計數頻率 = 84MHz / (83 + 1) = 1Mhz

再來是我要計數的數值就是決定觸發IRQ的關鍵

TIM3_TimeBase.TIM_Period = ;

IRQ觸發頻率 = 1Mhz / (20 + 1) = 47.63KHz

頭過上面的配置Timer就會開始啟動了,但實際要發起IRQ還是要透過中斷機制,所以還是必須配置中斷向量

 NVIC_TIM3.NVIC_IRQChannel                   = TIM3_IRQn;
NVIC_TIM3.NVIC_IRQChannelPreemptionPriority = ;
NVIC_TIM3.NVIC_IRQChannelSubPriority = ;
NVIC_TIM3.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_TIM3);

在Function Block 只用到一小部分 Timer 很強大還有很多細節須要去學習

(STM32F4) Timer 基本操作的更多相关文章

  1. STM32F4 Timer simplified block diagram

    Timers TIM1 and TIM8 use 16-bit counters and are the most complex timers of all timers included in t ...

  2. STM32F4 Timer Internal Trigger Connection

    The Timers can be cascaded to make more complex timing relationships, or longer periods. Internally ...

  3. (STM32F4) Timer Compare mode 操作

    Timer 比較模式(compare) 具體會用在哪種狀況目前還沒有這種經驗,但Compare有配置功能pin想必有應用會用到這個模式 從Function Block來看比較模式比基本Timer多了比 ...

  4. STM32F4 Timer External Clock TI2 Both Edges Demo

    #define CLK_FREQ ( 10000 ) #define CORE_FREQ ( 168000000 ) static void TIM_GPIO_Config( void ) { GPI ...

  5. (STM32F4) 精準的Delay不透過Timer

    從一個厲害的國外工程師看來的delay寫法,使用while loop會使用幾個指令去計算,可能會需要多少時間. while(variable--); 這行代碼執行一次預估會消耗MCU 4 clock ...

  6. 使用SVG基本操作API

    前面的话 本文将详细介绍SVG基本操作API,并使用这些API操作实例效果 基础API 在javascript中,可以使用一些基本的API来对SVG进行操作 [NS地址] 因为SVG定义在其自身的命令 ...

  7. Linux时间子系统之二:Alarm Timer

    一.前言 严格来讲Alarm Timer也算POSIX Timer一部分,包含两种类型CLOCK_REALTIME_ALARM和CLOCK_BOOTTIME_ALARM.分别是在CLOCK_REALT ...

  8. STM32F4 SPI with DMA

    STM32F4 SPI with DMA A few people have requested code, so I thought I’d post the code showing how I’ ...

  9. 78-WS2812-Library (STM32F4)

    78-WS2812-Library (STM32F4) //-------------------------------------------------------------- // File ...

随机推荐

  1. ReactNative常用第三方控件

    Flex可视化在线工具 http://the-echoplex.net/flexyboxes/?fixed-height=on&legacy=on&display=flex&f ...

  2. Openssl CA.pl命令

    一.简介 CA.pl是证书操作的友好接口,简化了一些相似的证书创建或管理操作 二.语法 CA.pl [-?] [-h] [-help] [-newcert] [-newreq][-newreq-nod ...

  3. ORM对象/关系模型

    1 ORM 对象关系映射(ORM)提供了概念性的.易于理解的模型化数据的方法.ORM方法论基于三个核心原则: 简单:以最基本的形式建模数据. 传达性:数据库结构被任何人都能理解的语言文档化. 精确性: ...

  4. CentOS7 安装Maven3

    下载安装文件 cd /root wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache- ...

  5. javascript的事件冒泡【转】

    出处:http://www.cnblogs.com/sanshi/archive/2009/02/18/1393165.html (感谢三生石上) 这是一个基础性的文章,使用Javascript观察D ...

  6. JS Closure 闭包

    /*一.变量的作用域要理解闭包,首先必须理解Javascript特殊的变量作用域.变量的作用域无非就是两种:全局变量和局部变量.Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量. ...

  7. OpenSLAM

    [SLAM] GMapping SLAM源码阅读(草稿):https://www.cnblogs.com/yhlx125/p/5634128.html 从零开始学习SLAM:https://blog. ...

  8. 关于iReport中纸张的大小 换算

    在iReprot里中进行报表设计时 第一步先确定纸张的大小   如A4纸  直接选就行了  A2 A3一样的,但还会在这种情况这种纸没有选择的怎么办? 比如  那种代小孔的纸     279*241m ...

  9. scala学习(idea编译过程https://blog.csdn.net/guiying712/article/details/68947747)

    scala官网 https://www.scala-lang.org/ 菜鸟教程学习 http://www.runoob.com/scala/scala-basic-syntax.html w3sch ...

  10. python读取pop3服务器邮件并且下载

    # -*- coding: cp936 -*- import poplib import random import os def getmail(): # 蒋辉文拥有该程序权利 你可以随意使用 em ...