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
1.利用TIM_DeInit將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);
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”的縮寫,簡稱脈寬調制,是利用微處理器的數字輸出來對模擬