1. 程式人生 > >STM32 通用定時器的輸出PWM功能 學習筆記

STM32 通用定時器的輸出PWM功能 學習筆記

首先來說,你要使用PWM模式你得先選擇用哪個定時器來輸出PWM吧!除了TIM6、TIM7這兩個普通的定時器無法輸出PWM外,其餘的定時器都可以輸出PWM,每個通用定時器可以輸出4路PWM,高階定時器TIM1、TIM8每個可輸出7路PWM。選好定時器及通道後,下一步就是要使能定時器的時鐘。先貼程式碼,再對每條程式碼做詳細分析。

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //選擇定時器模式:TIM脈衝寬度調製模式2
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸出比較極性高(也就是選擇有效電平,這裡是高電平為有效電平)
TIM_OC2Init(TIM3, &TIM_OCInitStructure);   //根據T指定的引數初始化外設TIM3 OC2
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIM3在CCR2上的預裝載暫存器,即TIM3_CCR2的預裝載值在更新事件到來時才能被傳送至當前暫存器中。
TIM_Cmd(TIM3, ENABLE);  //使能TIM3

這6句話就把PWM的通道配置好了,現在來解釋每一條程式碼:
為什麼選擇的是PWM2模式呢?為什麼不選擇PWM1模式呢?兩者又有什麼區別呢?
下面我們就一探究竟,PWM1和PWM2模式是由CCMRx的OCxM來決定的,因為我們選擇的是是通道2,所以設定的是OC2M,再看相關介紹OCxM[2:0]:

110:PWM模式1- 在向上計數時,一旦TIMx_CNT<TIMx_CCRx時通道為有效電平,否則為無效電平;
在向下計數時,一旦TIMx_CNT>TIMx_CCRx時通道x為無效電平(OC1REF=0),否則為有效電平(OC1REF=1)。

111:PWM模式2- 在向上計數時,一旦TIMx_CNT<TIMx_CCRx時通道為無效電平,否則為有效電平;
在向下計數時,一旦TIMx_CNT>TIMx_CCRx時通道x為有效電平,否則為無效電平。

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; 這句就是用來選有效電平,HIGH就代表1為有效電平。

TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIM3在CCR2上的預裝載暫存器,
即TIM3_CCR2的預裝載值在更新事件到來時才能被傳送至當前暫存器中。
這句話是說,CCR2中的預裝載值何時被傳送到當前的CNT暫存器中,這裡我們選擇的是當更新事件到來的時候才裝載,
追蹤暫存器的設定可知,原來設定的是CCMR1的OC2PE,其實還有一種方式是立即裝載看手冊:
OC1PE:輸出比較1預裝載使能(Output compare 1 preload enable)  位3 
0:禁止TIMx_CCR1暫存器的預裝載功能,可隨時寫入TIMx_CCR1暫存器,並且新寫入的數值立即起作用。
1:開啟TIMx_CCR1暫存器的預裝載功能,讀寫操作僅對預裝載暫存器操作,
TIMx_CCR1的預裝載值在更新事件到來時被傳送至當前暫存器中。

TIM_OC1PreloadConfig(),TIM_ARRPreloadConfig();這兩個函式控制的是ccr1和arr的預裝在使能,使能和失能的區別就是:
使能的時候這兩個儲存期的讀寫需要等待有更新事件發生時才能被改變(比如計數溢位就是更新時間)。失能的時候可以直接進行讀寫而沒有延遲。


另外在運行當中想要改變pwm的頻率和佔空比呼叫:TIM_SetAutoreload();TIM_SetCompare1()這兩個函式就可以了。
學習後發現stm32的定時器功能確實很強大,小總結一下方便以後使用的時候做參考。
Stm32定時器一共分為三種:tim1和tim8是高階定時器,6和7是基本定時器,2—5是通用定時器。從名字就可以看得出來主要功能上的差異。
今天我主要是用定時器做pwm輸出,所以總結也主要是針對pwm方面的。先大致說下通用和高階定時器的區別。通用的可以輸出四路pwm訊號互不影響。高階定時器可以輸出三對互補pwm訊號外加ch4通道,也就是一共七路。所以這樣算下來stm32一共可以生成4*5+7*2=30路pwm訊號。接下來還有功能上的區別:通用定時器的pwm訊號比較簡單,就是普通的調節佔空比調節頻率(別的不常用到的沒去深究);高階定時器的還帶有互補輸出功能,同時互補訊號可以插入死區,也可以使能剎車功能,從這些看來高階定時器的pwm天生就是用來控制電機的。

相關推薦

STM32 通用定時作為輸入捕獲 學習筆記

STM32 通用定時器作為輸入捕獲  通用定時器作為輸入捕獲的使用。我們將用TIM5的通道1(PA0)來做輸入捕獲,捕獲PA0上高電平的脈寬(用 WK_UP 按鍵輸入高電平),通過串列埠列印高電平脈寬時間。   輸入捕獲簡介: 輸入捕獲模式可以用來測量脈衝寬度或者測量頻率。

STM32 通用定時輸出PWM功能 學習筆記

首先來說,你要使用PWM模式你得先選擇用哪個定時器來輸出PWM吧!除了TIM6、TIM7這兩個普通的定時器無法輸出PWM外,其餘的定時器都可以輸出PWM,每個通用定時器可以輸出4路PWM,高階定時器TIM1、TIM8每個可輸出7路PWM。選好定時器及通道後,下一步就是要使能

STM32 通用定時定時功能 學習筆記

這節主要講下STM32 通用定時器的定時功能。 一、TIMx的時鐘源問題: STM32有8路暫存器,包括TIM1和TIM8兩個高階定時器,TIM6和TIM7兩個基本定時器,TIM2-TIM5四個通用定時器,定時器是完全獨立的,而且沒有互相共享任何資源,它們可以一起同步操作,

STM32定時----通用定時輸出帶死區互補PWM

功能:利用一個普通定時器,輸出2路互補的、頻率可調、佔空比可調、死區可調的PWM 原理:如下圖,計數模式為中心對齊模式 可以看出,CH3高電平區間是以計數器計到4為中心,向兩邊延伸的。 而CH4,因為輸出極性相反,是以0為中心向兩邊延伸的。 CCR3變小,佔空比上升 CC

STM32定時輸出PWM頻率和步進電機控制速度計算

內部 定時 .cn 但是 nbsp 返回 定時器 開發 r12 1、STM32F4系列定時器輸出PWM頻率計算 第一步,了解定時器的時鐘多少:   我們知道AHP總線是168Mhz的頻率,而APB1和APB2都是掛在AHP總線上的。 (1)高級定時器timer1, time

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

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

STM32通用定時的基本定時功能實現燈閃爍

/*MAIN.C*/ /* Includes ------------------------------------------------------------------*/#inclu

STM32通用定時配置

STM32通用定時器配置 一、STM32通用定時器原理                   

STM32F103定時輸出PWM波控制直流電機

       這個暑假沒有回家,在學校準備九月份的電子設計競賽。今天想給大家分享一下STM32高階定時器輸出PWM波驅動直流電機的問題。。        要想用定時器輸出的PWM控制直流電機,,首先要

STM32通用定時TIM2、3、4

STM32通用定時器用法 ---附原始碼 1.STM32通用定時器的基本用法,即簡單的定時功能。支援向上計數、向下計數、中央對其模式,這裡僅以向上計數講解。 2.向上計數原理:從0開始,每經過一個時鐘脈衝加1,直到到達通過TIMx_ARR暫存器設定的值時為止,至此產生更新事

關於STM32通用定時更新事件中斷

 //定時器3中斷服務程式   void TIM3_IRQHandler(void)  {                    if(TIM3->SR&0X0001) //產生更新事件   {    LED1=!LED1;    LED0=!LED0;  

stm32通用定時用做外部脈衝計數器的例程

最近幾天要用到stm32對外部輸入脈衝進行計數,很自然想到定時器,可是手上資料沒有講解stm32定時器如何用作外部計數器的,在網上找例程,也沒找到幾個正確的,自己硬著頭皮仔細研究參考手冊,終於知道如何配置了,並寫了一個例程,希望將來對一些網友有用。 其實stm32通用定時

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

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

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

nbsp 錯誤 buffer put inter def internal reset 有效 1、TIMER輸出PWM基本概念 脈沖寬度調制(PWM),是英文“Pulse Width Modulation”的縮寫,簡稱脈寬調制,是利

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

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

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

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

STM32 定時 輸出40KHZ PWM方波

大家好,本人小白一個,利用課餘時間學習STM32,如有不對之處,還請各位大佬指點,只有認識到錯誤,才會有進步嘛。 言歸正傳,最近做了一個DIY超聲波的小專案,想利用STM32定時器直接輸出40KHZ的方波,不過卻遇到了一些小的疑惑。 由定時器頻率計算公式可知,在72MHZ

微控制器入門學習十三 STM32微控制器學習通用定時

本篇重點記錄的是STM32F1的通用定時器。 STM32F103ZE有8個定時器,其中2個高階定時器(TIM1、TIM8),4個通用定時器(TIM2、TIM3、TIM4、TIM5),2個基本定時器(TIM6、TIM7)。下表是對這8個定時器的詳細描述。

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

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

通用定時PWM輸出實驗

知識回顧 本節知識需要了解通用定時器原理的前提下進行學習 我們將通用定時器分為四個部分: 1,選擇時鐘 2,時基電路 3,輸入捕獲 4,輸出比較 本節定時器PWM輸出主要涉及到定時器框圖右下方部分,即輸出