1. 程式人生 > >STM32學習筆記:通用定時器基本設定

STM32學習筆記:通用定時器基本設定

STM32 包含11個定時器,其中TIM2~TIM5為通用定時器。

通用定時器掛載在低速外設匯流排APB1上,其時鐘來源於輸入為APB1的一個倍頻器,只要APB1的時鐘分頻數不為1,TIMx的時鐘頻率就會為APB1時鐘頻率的2倍,即72MHz 。

配置通用定時器需要4步(以配置TIM2為例):

(1)配置系統時鐘

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);倍
開啟TIM2與GPIOA的時鐘,其中TIM2掛載在APB1上,GPIOA掛載在APB2上;

(2)配置NVIC

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 設定NVIC中斷分組2,2位搶佔優先順序,2為子優先順序 
NVIC_InitStructure.NVIC_IRQChannel = TIM2_UP_IRQn;//設定中斷為TIM2上升中斷
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//搶佔優先順序1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;//子優先順序3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能中斷
NVIC_Init(&NVIC_InitStructure);

(3)配置GPIO

GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;//PA0,PA1,PA2,PA3
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//設定為埠複用模式		    
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);

(4)配置TIMER

TIM_DeInit(TIM2);	
TIM_TimeBaseStructure.TIM_Period = arr;           
TIM_TimeBaseStructure.TIM_Prescaler = psc;	           
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;	
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;  
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
  
TIM_ARRPreloadConfig(TIM2, ENABLE);			 
TIM_Cmd(TIM2, ENABLE); 
1.利用TIM_DeInit將TIMER設定為預設值;

2.TIM_Period設定自動裝入的值,累計(TIM_Period+1)個時鐘脈衝後產生更新或中斷;

3.TIM_Prescaler設定預分頻係數,定時器的時鐘頻率=72Mhz/(TIM_Prescaler+1);

定時器頻率=((1+TIM_Prescaler )/72M)*(1+TIM_Period )

       例:如果想要設定定時器頻率為1秒,可以設定

TIM_Prescaler=35999,TIM_Period=1999 //2Khz的頻率,計數到2000

TIM_Prescaler=7199,TIM_Period=9999 //10KHz的頻率,計數到10000

兩種不同的引數設定都會使定時器的頻率為1秒,但是在作為PWM輸出時會有細度不同的問題,後者的細度更高些,作者更傾向於第二種配置。

4.TIM_ClockDivision設定時鐘分割,可設定為TIM_CKD_DIV1,TIM_CKD_DIV2,TIM_CKD_DIV4,

當設定為TIM_CKD_DIV1時:
       TDTS = Tck_tim
當設定為TIM_CKD_DIV2時:
       TDTS = 2Tck_tim
當設定為TIM_CKD_DIV4時:
       TDTS = 4Tck_tim

TIM_ClockDivision的作用就是在未分頻之前根據要求建立新的分頻器,確定定時器,確定一定的延時時間,在此時間內完成一定預期的功能,一般不太用,所以無論是定義上文中的哪個值對原本定時器的頻率都毫無影響,不過並不是沒有作用的,以後會有能用到的地方。


5.TIM_CounterMode設定計數模式,可以設定為向上計數、向下計數和中央對齊計數,其中比較常用的為向上計數模式TIM_CounterMode_Up和向下計數方式TIM_CounterMode_Down;

6.TIM_RepetitionCounter設定重複溢位次數,就是多少次溢位後會給你一次中斷,一般設定為0,只有高階定時器才有用;

7.TIM_ARRPreloadConfig設定是否使用 預裝載緩衝器;

8.TIM_Cmd來開啟定時器TIM2;

相關推薦

STM32學習筆記通用定時基本設定

STM32 包含11個定時器,其中TIM2~TIM5為通用定時器。 通用定時器掛載在低速外設匯流排APB1上,其時鐘來源於輸入為APB1的一個倍頻器,只要APB1的時鐘分頻數不為1,TIMx的時鐘頻率就會為APB1時鐘頻率的2倍,即72MHz 。 配置通用定時器需要4步(

STM32CubeMX學習筆記——STM32H743通用定時PWM

STM32CubeMX學習筆記——STM32H743通用定時器PWM Github 功能簡述 STM32CubeMX配置 Pinout配置 Clock Configuration配置 Configuration

STM32CubeMX學習筆記——STM32H743通用定時

STM32CubeMX學習筆記——STM32H743通用定時器 Github 功能簡述 STM32CubeMX配置 Pinout配置 Clock Configuration配置 Configuration

STM32學習筆記(5)通用定時PWM輸出

PWM的輸出管腳是確定好的,具體的引腳功能可以檢視《STM32參考手冊》的“8.3.7 定時器複用功能重對映”一節。在此需要強調的是,不同的TIMx有分配不同的引腳,但是考慮到管腳複用功能,STM32提出了一個重映像的概念,就是說通過設定某一些相關的暫存器,來使得在其他非原始指定的管腳上也能輸出PWM。但是這

STM32-通用定時基本定時功能

數字 vision 實現 定義 還要 可能 輸出 給定 禁止 1. STM32的Timer簡介 STM32中一共有11個定時器,其中2個高級控制定時器,4個普通定時器和2個基本定時器,以及2個看門狗定時器和1個系統嘀嗒定時器。其中系統嘀嗒定時器是前文中所描述的Sys

學習筆記python3,一些基本語句(2017)

val from 列表 除法 方法 是否 主程 return tuple 數學運算 1、整除、取模 a = 36 b = 10 c = d = 0 c = a//b #取整除 - 返回商的整數部分 d = a % b #取模 - 返回

STM32學習筆記開篇準備

一個 pan 開發文檔 發現 soft 也有 系統 寄存器 http STM32作為一類高級單片機,在應用中不容小覷。 所以本人從2018年1月1日開始對於STM32系列單片機的學習 很感謝我的班主任送我的開發板:STM32F429I-DISCOVERY (M4) 以下

effectiveJava學習筆記通用程式設計(一)

將區域性變數的作用域最小化 其實大部分人還是在第一次使用變數的時候宣告變數的,在開頭就將所有變數宣告的還沒見過。 要使區域性變數的作用域最小化,最有力的方法就是在第一次使用它的地方宣告。 但是,這裡書中講到了for迴圈優於while迴圈,值得我們注意。 for迴圈將變數宣告在迴圈內,

effectiveJava學習筆記通用程式設計(二)

當心字串連線的效能 由於String是final的,不可變,他內部每次拼接都會建立一個StringBuffer物件,這樣你如果拼接n次,那麼他建立了n次物件,效能低下,而StringBuilder只在外面建立了一個物件,其他直接append字串即可。 所以,我們在迴圈中拼接字串的時候要尤其注

muduo網路庫學習筆記(三)TimerQueue定時佇列

目錄 muduo網路庫學習筆記(三)TimerQueue定時器佇列 Linux中的時間函式 timerfd簡單使用介紹 timerfd示例 muduo中對timerfd的封裝 TimerQueue的結構.

muduo網絡庫學習筆記(三)TimerQueue定時隊列

tex || 麻煩 這也 原因 否則 errno.h 受限 bind 目錄 muduo網絡庫學習筆記(三)TimerQueue定時器隊列 Linux中的時間函數 timerfd簡單使用介紹 timerfd示例 muduo中對timerfd的封裝 TimerQueue的結

Java多執行緒學習筆記20之定時Timer

詳細程式碼見:github程式碼地址   本節內容:     定時器Timer的使用及分析 1) 如何實現指定時間執行任務 2) 如何實現按指定週期執行任務   第五章 定時器Timer 定時/計劃

STM32學習筆記讀寫內部Flash(介紹+附程式碼)

原文地址::https://www.cnblogs.com/pertor/p/9484663.html 相關文章 1、STM32學習筆記:讀寫內部Flash----https://blog.csdn.net/qq_33559992/article/details/77676716 2、S

STM32應用簡章之通用定時

① 能定時器時鐘。        RCC_APB1PeriphClockCmd(); ②  初始化定時器,配置ARR,PSC。       TIM_TimeBaseInit(); ③開啟定時器中斷,配置NVIC。       void TIM_ITConfig();

python學習筆記迭代、生成器、yield關鍵字

一、迭代器 ---iterator 所有能用for...in...語法的叫做迭代器,列表、字串、檔案等等。 #This is a iterator, #Here uses "[ ]" not "( )" ☆ mylist=[x*x for x in range(3)] for i in my

STM32學習筆記ADC理解

ADC 簡介 12 位 ADC 是逐次趨近型模數轉換器。它具有多達 19 個複用通道,可測量來自 16 個外部 源、兩個內部源和 VBAT 通道的訊號。這些通道的 A/D 轉換可在單次、連續、掃描或不連續 取樣模式下進行。ADC 的結果儲存在一個左對齊或右對齊的 16 位資料暫存器中

STM32開發筆記3: STM32F407定時2-5的使用方法

微控制器型號:STM32F407     STM32F4有多種定時器,其中TIM2-TIM5稱為通用定時器,具有相似的軟體設定及使用方法。在這裡還需要注意的是TIM3和TIM4為16位定時器,TIM2和TIM5為32位定時器。     使用TIM2-5可以遵循以下步驟:  

STM32學習筆記基礎例子

        本例子程式碼參考了STM32庫開發實戰指南中的程式碼,由於使用的板子是尚學STM32F103ZET6,為了配合板上已有資源,也參考了其配套程式碼。為了便於書寫文字,我儘量將程式碼都寫到了一個檔案中,這種方式是不推薦的,在做具體工程時最好程式碼分類管理,使工程

STM32 不同主頻下的定時死區設定

根據datasheet裡的以下說明,算出各種主頻下,DTG賦值和具體死區時間的對應關係,可供查詢參考。 在168M的定時器時鐘下 : DTS=1/168M=5.95238ns。 所以第一個公式,死區時間能從5.95ns的步進從0調整到 12

STM32學習筆記(5)——通用定時PWM輸出

part 大小 模式 lan 晶振 kcon 筆記 利用 .cn 1、TIMER輸出PWM基本概念 脈沖寬度調制(PWM),是英文“Pulse Width Modulation”的縮寫,簡稱脈寬調制,是利用微處理器的數字輸出來對模擬