1. 程式人生 > >stm32f407之高階定時器 死區互補PWM(操作暫存器)

stm32f407之高階定時器 死區互補PWM(操作暫存器)

十四、高階定時器

死區互補PWM

         高階定時器的功能有很多,這裡只介紹死區互補PWM輸出功能。其實死區互補PWM跟通用定時器的PWM配置差異不大,只是需要設定多CCER暫存器中的幾個位以及剎車與死區暫存器BDTR。對暫存器的具體描述請參考資料手冊。

         配置步驟:

1.     使能相關時鐘。

2.     配置相關的引腳模式、速度、以及複用功能。

3.     使能TIM時鐘

4.     設定分頻。

5.     設定週期。(ARR的值)週期=(PSC+1)* ARR / TIMx時鐘

6.     產生一次更新事件,更新影子暫存器的值。

7.     在CCMR中設定PWM模式。

8.     設定各通道佔空比。佔空比= CCRx / ARR。

9.     使能比較輸出。

10.  啟動預裝載。

11.  死區時間設定,使能輸出。

12.  開啟定時器。

程式

/************************************
    標題:死區互補PWM
    軟體平臺:IAR for ARM6.21
    硬體平臺:stm32f4-discovery
    主頻:168M

    描述:三對死區互補PWM、一路普通PWM
          PE8 ----- TIM1_CH1N
          PE9 ----- TIM1_CH1
          PE10 ----- TIM1_CH2N
          PE11 ----- TIM1_CH2
          PE12 ----- TIM1_CH3N
          PE13 ----- TIM1_CH3
          PE14 ----- TIM1_CH4
    
    author:小船
    data:2012-02-09
*************************************/

#include <stm32f4xx.h> 

void main ()
{   

  SCB->AIRCR = 0x05FA0000 | 0x400;  //中斷優先順序分組 搶佔:響應=3:1
  
  RCC->AHB1ENR |= (1<<4); //開啟GPIOE時鐘
  GPIOE->MODER |= 0X2AAA0000;//PE8、9、10、11、12、13、14第二功能
        //推輓輸出
  GPIOE->OSPEEDR |= 0x3fff0000;//速度100m
  GPIOE->PUPDR |= 0x15550000;//上拉  
  
  //PE8、9、10、11、12、13、14第二功能AF1
  GPIOE->AFR[1] |= 0x01111111;
  
  RCC->APB2ENR |= (1<<0); //開啟TIM1時鐘
  TIM1->PSC = 167; //對時鐘168M進行168分頻,使得計數頻率為1M
  TIM1->ARR = 10000;  //週期10ms
  TIM1->EGR |= 1; //產生一次更新事件
  
  TIM1->CCMR1 |= 0x6060;//PWM模式1
  TIM1->CCMR2 |= 0x6060;//PWM模式1
  
  TIM1->CCR1 = 8000;//設定佔空比
  TIM1->CCR2 = 6000;
  TIM1->CCR3 = 4000;
  TIM1->CCR4 = 2000;
  
  TIM1->CCER |= 0x1ddd;//使能比較輸出
  
  TIM1->CCMR1 |= 0x0808;//啟動預裝載
  TIM1->CCMR2 |= 0x0808;
  
  TIM1->BDTR|=1<<15;    // 剎車使能位置1,開啟所有輸出通道
  TIM1->BDTR|=0xCD;     // 死區時間設定
  TIM1->CR1 |= 1; //開始計時

  while(1)
  {
  };
}





相關推薦

stm32f407高階定時 死區互補PWM操作

十四、高階定時器 死區互補PWM          高階定時器的功能有很多,這裡只介紹死區互補PWM輸出功能。其實死區互補PWM跟通用定時器的PWM配置差異不大,只是需要設定多CCER暫存器中的幾個位以及剎車與死區暫存器BDTR。對暫存器的具體描述請參考資料手冊。

stm32f407PWM操作

PWM          脈寬調製模式可以生成一個由TIMx_ARR暫存器的值確定頻率和TIMx_CCRx暫存器的值確定佔空比的訊號。          可以對每個通道獨立選擇PWM模式,( OCx輸出一個PWM訊號)在TIMx_CCMRx暫存器的OCxM位寫110(PW

stm32f407基本定時TIM6&TIM7操作

基本定時器TIM6&TIM7       基本定時器TIM6和TIM7包括一個由可程式設計分頻器驅動的16位自動過載計數器。它可以用作普通的定時器,也可以用來驅動DAC。這兩個定時器是完全獨立的,不共享任何資源。更多時候是與DAC平配合使用。 作為定時器

stm32f407三ADC交替取樣操作

三ADC交替取樣 在多ADC模式中,ADC1為主,ADC2或ADC3為從,交替或者同時觸發,工作模式取決於ADC_CCR暫存器的MULTI[4:0]。        多ADC模式中,轉換後的資料可以多模式的資料暫存器(ADC_CDR)中讀取。狀態可以在多模式的狀態暫存器(A

4412下的pwm驅動程式-形式

這是一個操作暫存器的pwm驅動,關於pwm這一塊可以看晶片手冊,這些暫存器至於為什麼要這樣設定,手冊裡都有說明 #include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h

8086彙編學習[BX],CX與loop指令,ES

一、彙編程式的基本格式: 1、基本格式與解析: assume cs:codeseg //assume假設CS暫存器與codeseg段有關聯,codeseg段本就是程式碼段 codeseg segment //段開始,codeseg為段名,可

STM32 備份域備份、備份SRAM詳解及資料丟失問題處理

某些STM32晶片提供了備份SRAM,例如STM32F系列晶片有4K的備份SRAM。然而在使用過程中發現備份區域資料丟失!下面從STM32系列晶片提供的整個備份域來看看啥情況。 電池備份域   首先,這部分在參考手冊的電源(PWR)章節有詳細的介紹。器件的工作電

linux通過ptrace獲取指定pthread執行緒的資訊

#include <stdio.h> #include <unistd.h> //for sleep #include <stdlib.h> //for exit

STM32個人學習筆記-第二集F4GPIO介紹

STM32個人學習筆記-第二集 一,GPIO口暫存器 GPIO有九組IO口,分別用大寫字母表示,即,x=A/B/C/D/E/F/G/H/I. IO口可以由軟體配置成如下8種模式 1,輸入浮空 2,輸入上拉 3,輸入下拉 4,模擬輸入 5,開漏輸出 6,推輓輸出

3線實現2路12位數碼管顯示不同值STM32版本

#include <stm32f10x_lib.h> #include "sys.h" #include "usart.h" #include "delay.h" #include "dis.h"                             unsi

stm32 RTC實時時鐘[操作+庫函式]

#include <stm32f10x_lib.h> #include "rtc.h" #include "stdio.h" tm timer; //定義時鐘結構體,主函式直接可以呼叫此結構體讀出時間 //平年的月份日期表,月份縮寫表 const u8 Days_Table[12]

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

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

PWM互補輸出及死區時間程式碼和詳解版本

原文: http://www.openedv.com/thread-62861-1-1.html一直跟著原子哥的教程一直學到PWM這一章發現一頭霧水,自己也沒發過什麼分享帖,感覺原子哥對PWM這章講的比較少(mini板教程),後面自己上網找了些資料,網上關於PWM講的也不多,

STM32F103輸出多路死區互補PWM

TIM1,TIM8可以產生死區互補PWM波,學習後發現stm32的定時器功能確實很強大,小總結一下方便以後使用的時候做參考。Stm32定時器一共分為三種:tim1和tim8是高階定時器,6和7是基本定時器,2—5是通用定時器。從名字就可以看得出來主要功能上的差異。今天我主要是

C51微控制器中斷,定時PWM原理,配置及使用

大家晚上好,我分享的內容大體是先介紹中斷,各暫存器使用(可能這裡有點囉嗦),然後就簡單寫一下定時器,然後PWM原理,以及它的配置和使用。大概今晚就這樣了,如果有什麼錯的,或有什麼疑問,請大家馬上提出來,一起進步。 中斷:當計算機執行正常程式時,系統中出現某些急需處理的異常

STM32 系列 DAC 運用於理解

在這裡,我也不多BB,基本是看了原子的PDF之後,自己理解。所以可能比較簡略 單個DAC通道如下: VDDA 和VSSA為模擬電源端。   輸出電壓 = Vref+ * (DORx/2^n)          &

UVM三:模型的整合

本文轉自:http://www.eetop.cn/blog/html/28/1561828-6266220.html 我們在上一節大致瞭解了與暫存器相關的流程,包括暫存器描述檔案和UVM暫存器模型生成。從上節給的暫存器模型流程圖中我們可以看到,接下來需要考慮選擇與DUT暫存器介面一致的匯流排UV

UVM二:模型概覽

本文轉自:http://www.eetop.cn/blog/html/28/1561828-6266219.html 暫存器模型構建 在構建UVM暫存器模型的過程中,讀者需要了解下面這些與模型構建相關的類和它們的功能:     簡化後的MCDF暫存器模

UVM七:模型的常規方法

本文轉自:http://www.eetop.cn/blog/html/28/1561828-6266224.html mem與reg的聯絡和差別 UVM暫存器模型也可以用來對儲存建模。uvm_mem類可以用來模擬RW(讀寫)、RO(只讀)和WO(只寫)型別的儲存,並且可以配置其模型的資料寬度

UVM六:模型的常規方法

本文轉自:http://www.eetop.cn/blog/html/28/1561828-6266223.html mirrored、desired和actual value 在我們應用暫存器模型的時候,除了利用它的暫存器檔案資訊,也會利用它來跟蹤暫存器的值。跟蹤暫存器的值,一方面是建立m