STM32F1通用定時器配置步驟(使用HAL庫)

2021-01-11 思說想話

(1)使能定時器時鐘

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//使能TIM4時鐘

(2)初始化定時器參數,包含自動重裝值,分頻係數,計數方式等

voidTIM_TimeBaseInit(TIM_TypeDef*TIMx,TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);

typedef struct

{

uint16_t TIM_Prescaler; //定時器預分頻器

uint16_t TIM_CounterMode; //計數模式

uint32_t TIM_Period; //定時器周期

uint16_t TIM_ClockDivision; //時鐘分頻

uint8_t TIM_RepetitionCounter; //重複計數器

} TIM_TimeBaseInitTypeDef;

了解結構體成員功能後,就可以進行配置,例如:

TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;

TIM_TimeBaseInitStructure.TIM_Period=1000; //自動裝載值

TIM_TimeBaseInitStructure.TIM_Prescaler=35999; //分頻係數

TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;

TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //設置向上計數模式

TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStructure);

定時器定時時間計算公式如下:Tout= ((per)*(psc+1))/Tclk;

(3)設置定時器中斷類型,並使能

void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);

(4)設置定時器中斷優先級,使能定時器中斷通道

NVIC初始化庫函數是NVIC_Init();

typedef struct

{

uint8_t NVIC_IRQChannel; //中斷源

uint8_t NVIC_IRQChannelPreemptionPriority; //搶佔優先級

uint8_t NVIC_IRQChannelSubPriority; //響應優先級

FunctionalState NVIC_IRQChannelCmd; //中斷使能或失能

} NVIC_InitTypeDef;

了解結構體成員功能後,就可以進行配置,例如:

NVIC_InitTypeDef NVIC_InitStruct;

NVIC_InitStruct.NVIC_IRQChannel=TIM4_IRQn;

NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=2;

NVIC_InitStruct.NVIC_IRQChannelSubPriority=3;

NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;

NVIC_Init(&NVIC_InitStruct);

(5)開啟定時器

void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);

(6)編寫定時器中斷服務函數

TIM4_IRQHandler

ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT);

if(TIM_GetITStatus(TIM4,TIM_IT_Update))

{

...//執行TIM4更新中斷內控制

}

void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT);

固件庫中還有兩個函數是用來讀取狀態標誌位以及清除中斷標誌位,函數分別為TIM_GetFlagStatus和TIM_ClearFlag

相關焦點

  • STM32 高級定時器-PWM簡單使用
    高級定時器與通用定時器比較類似,下面是一個TIM1 的PWM 程序,TIM1是STM32唯一的高級定時器。共有4個通道有 死區有互補。本文引用地址:http://www.eepw.com.cn/article/201612/325215.htm先是配置IO腳: GPIO_InitTypeDef GPIO_InitStructure; /* PA8設置為功能腳(PWM) */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
  • stm32庫函數學習篇通用定時器輸入捕獲功能
    實現功能:PA8隨意延時驅動led燈閃爍,並且將PA8用杜邦線連接到PA7口,PA7是通用定時器TIM3的2通道,在TIM3_CH2觸發中斷程序中取反連接到PD2口的led燈,指示中斷程序運行,並且每次進入中斷後改變觸發捕獲的極性。實現兩個led燈會交替閃爍。
  • stm32f407之高級定時器 死區互補PWM(操作寄存器)
    高級定時器的功能有很多,這裡只介紹死區互補PWM輸出功能。其實死區互補PWM跟通用定時器的PWM配置差異不大,只是需要設置多CCER寄存器中的幾個位以及剎車與死區寄存器BDTR。對寄存器的具體描述請參考數據手冊。配置步驟:1.     使能相關時鐘。2.
  • STM32教程(五)HAL庫之GPIO函數及實例詳細介紹!
    今天介紹STM32 HAL庫的GPIO函數庫,首先打開stm32f4xx_hal_gpio.h文件,我們能看到一些結構體定義以及GPIO引腳的地址定義等等,這些都很好理解,我們需要重點看HAL庫中GPIO的函數庫有哪些?以及這些函數庫有什麼作用以及怎麼使用這些函數?
  • 正點原子-戰艦V3第四章 STM32F1 基礎知識入門
    HAL庫的 SystemInit 函數除了打開 HSI 之外,沒有任何時鐘相關配置,所以使用 HAL 庫我們必須編寫自己的時鐘配置函數。上一節我們講解了時鐘系統配置步驟。在 STM32F1 的 HAL 庫中,外設時鐘使能操作都是在 RCC 相關固件庫文件頭文件stm32f1xx_hal_rcc.h 定義的。大家打開 stm32f1xx_hal_rcc.h 頭文件可以看到文件中除了少數幾個函數聲明之外大部分都是宏定義標識符。
  • 單片機中各種周期的關係與定時器原理
    3、stm32f103zet6 定時器  大容量的STM32F103XX增強型系列產品包含最多2個高級控制定時器、4個普通定時器和2個基本定時器,以及2個看門狗定時器和1個系統嘀嗒定時器。四個獨立的通道可以用於:  (1)輸入捕獲  (2)輸出比較  (3)產生PWM(邊緣或中心對齊模式)  (4)單脈衝輸出  配置為16位標準定時器時,它與TIMX定時器具有相同的功能。配置為16位PWM發生器時,它具有全調製能力(0~100%)。
  • 一個定時器生成多路PWM波形的原理和方法
    ③開始計時,打開定時器中斷。定時器中斷程序中n++;當n當n>=n2&& n當n>n1時,返回步驟①進行下一個周期的PWM.這兩個定時器功能非常簡單,基本上和SysTick 定時器相當。但是我在使用的時候確是費了一番周折才調試通過,所以還是應該將這兩個定時器的使用方法好好的寫一寫。基本定時器TIM6和TIM7各包含一個16位自動裝載計數器,由各自的可編程預分頻器驅動。簡單的說兩個定時器是從0計數到N(由自動裝載計數器來確定N的具體值),然後復位回0 重新計數。
  • 如何實現STM32F407單片機的ADC轉換
    用到的引腳是PA3也就是ADC1的通道3 1、ADC的主要參數 a、解析度----stm32f407的解析度有6位、8位、10位、12位,參考電壓如果是3.3 那麼最小解析度就是3.3/4095。 b、轉換時間----stm32f407的最高允許頻率是36M,最快轉換時間 = 3+12個周期 =0.71us。
  • STM32f103 定時器之編碼器接口模式
    應該算是算法層級的吧,還沒做到實際應用,暫時不深究,本篇僅僅對旋轉編碼器的原理以及STM32編碼器接口模式的配置使用方法做個簡介。本文引用地址:http://www.eepw.com.cn/article/201807/384496.htm正文編碼器分類:按工作原理:光電式、磁電式和觸點電刷式;按碼盤的刻孔方式:增量式和絕對式兩類;這是從網上看到一個簡介,只接觸過Arduino的編碼器,其他暫未使用過。Arduino的編碼器屬於增量式。
  • STM32四種庫對比:寄存器、標準外設庫、HAL、LL
    GPIOC->MODER |= GPIO_MODER_MODER0; } STM32Snippets是高度優化的示例代碼集合,使用符合 每個STM32系列的100多個片段演示了如何以最小的內存佔用有效地使用STM32外圍設備。
  • STM32 定時器的4通道計數器應用
    通用定時器確實比較強悍,功能極多我也比較暈此為在不牽扯PWM與DMA下像C51那樣計數點燈。本文引用地址:http://www.eepw.com.cn/article/201611/317176.htm當然你要配置一些IO口作為點燈用這裡就不詳細說了。
  • STM32學習筆記——使用函數庫編程控制GPIO口輸出
    看了網上許多人的代碼以及各類開發板所帶的例程,大多數使用的都是官方發布的函數庫來編程,通過查詢後發現,使用函數庫來編程可以簡化開發過程,並不需要追溯到各個寄存器,通過查看庫手冊,新手也可以快速應用STM32,因此
  • STM8 STM32 數據類型
    首先說一下編程過程中幾個步驟吧第一,選擇一門語言,C語言或彙編語言,嵌入式編程一般目前流行還是C,這個需要基礎與時間第二讀懂了解 MCU的寄存器各寄存器的功能,尤其是一些IO口設置,各模塊時鐘設置比如定時器,I2C,同步異步串口,PWM等等,以前的話51的話沒有這樣設置。而現在MCU基本上各模塊時鐘都分開了。
  • STM32F1與STM32F0在GPIO_TypeDef 寄存器方面的不同
    -UART(通用異步收發器),單總線4、STM32的串口通信接口 :1.UART:通用異步收發器UART異步通信方式特點:全雙工異步通信。分數波特率發生器系統,提供精確的波特率。-發送和接受共用的可編程波特率,最高可達4.5Mbits/s 可編程的數據字長度(8位或者9位);可配置的停止位(支持1或者2位停止位);可配置的使用DMA多緩衝器通信。單獨的發送器和接收器使能位。
  • Python語言中使用pyqtgraph庫實現數據可視化
    這兒介紹另一種功能強大的2D/3D繪圖庫——pyqtgraph,它是一種建立在PyQt4/PySide和numpy庫基礎之上的純Python圖形GUI庫,在數學、科學和工程領域都有著廣泛的應用。儘管該庫完全用python編寫,但內部由於使用了高速計算的numpy信號處理庫以及Qt的GraphicsView框架,因此,它在大數據量的數字處理和快速顯示方面有著巨大的優勢,它適合於需要快速繪圖更新、視頻或實時交互性的操作場合。另外,它不僅為各種數據提供了快速可交互式的圖形顯示,同時也提供了用於快速開發應用程式的各種小工具,如屬性樹、流程圖等小部件。下面通過例子說明該庫的使用方法。
  • 基於STM32定時器的紅外遙控數據接收設計原理
    2、定時器計數和輸入捕獲 定時器就是按照一個特定的頻率對計數值進行加一或減一操作,當數值溢出時則產生一個標誌或中斷。 定時器的輸入捕獲就是可以測量輸入信號的脈衝寬度。 本次就是通過普通計數和輸入捕獲的結合來實現的。
  • STM32CubeMX升級至V5.2.0,STM32G4即將推出,STM32CubeIDE正式面世
    官網網址: www.st.com/stm32cubemx 百度網盤下載: STM32CubeMX工具、HAL庫下載 這裡其實都是新增內容,對於開發者來說,不用這些新增內容,可以不用升級。 官網網址: https://www.stmicroelectronics.com.cn/en/development-tools/stm32cubeide.html
  • 為什麼高速數據通道需要重定時器?
    轉接驅動器或重定時器晶片的典型應用包括:mykednc 到達大型PCB的最遠端 使用額外的連接器 支持子卡 連接擴展架 使用低端PCB材料 允許擁有較短距SerDes的晶片支持需要較長距離SerDes的應用 增強設備功能轉接驅動器和重定時器的比較典型的轉接驅動器數據通路包含連續時間線性均衡器(CTLE)、可變增益放大器(VGA)和線性驅動器。
  • 如何採用STM32中的控制定時器Tim1實現計數器功能
    STM32中的高級控制定時器(Tim1)是由一個16位的自動裝載計數器組成,它由一個可編程預分頻器驅動。 用途在於:測量輸入信號的脈衝寬度(輸入捕獲),或者產生輸出波形(輸出比較,PWM,嵌入死區時間的互補PWM等)。 使用定時器預分頻器和RCC時鐘控制預分頻器,可以實現脈衝寬度和波形周期從幾個微秒到幾個毫秒的調節。