定時器--STM32f4--HAL

基本概念

STM32中有三種定時器,高級定時器,通用定時器,基本定時器,具體如下圖:
在這里插入圖片描述
發生如下事件將產生中斷/DMA

  • 更新:計數器向上溢出/向下溢出,計數器初始化
  • 觸發事件:計數器啟動、停止、初始化或者由內部/外部觸發計數
  • 輸入捕獲
  • 輸出比較
  • 支持針對定位的增量(正交)編碼器和霍爾傳感器電路
  • 觸發事件作為外部時鐘或者按周期的電流管理

計數器模式

  1. 向上計數:計數器從0計數到自動加載值ARR,然后重新沖0開始計數并且產生一個計數器溢出事件
  2. 向下計數模式:計數器從自動裝入的值ARR開始向下計數到0,然后從自動裝載值重新開始,并產生一個計數器向下溢出事件
  3. 終于對齊模式(向上/向下計數):計數器從0開始計數到自動裝載值的值-1,產生一個計數器溢出事件,然后向下計數到1并產生一個計數器溢出事件,然后再從0開始重新計數
    在這里插入圖片描述

定時器中斷實現步驟

  1. 使能定時器
__HAL_RCC_TIM3_CLK_ENABLE();
  1. 初始化定時器,配置ARR,PSC
HAL_TIM_Base_Init();
  1. 開啟定時器中斷
HAL_TIM_Base_Start();
HAL_TIM_Base_Start_IT();
  1. 設置中斷優先級
HAL_NVIC_SetPriority();
HAL_NVIC_EnableIRQ();
  1. 編寫中斷服務函數
TIMx_IRQHandler();//中斷服務函數
HAL_TIM_IRQHandler();	//HAL庫定時器中斷通用處理函數
HAL_TIM_PeriodElapsedCallback();	//定時器更新中斷回調函數

具體代碼

使用TIM3讓LED1每500ms亮一次

  1. 使能定時器,我們放在第二步
  2. 初始化定時器,配置ARR,PSC
TIM_HandleTypeDef time_handler;
void time_init(void)
{time_handler.Instance = TIM3;			//可以取TIM1-TIM14time_handler.Init.CounterMode = TIM_COUNTERMODE_UP;		//計數模式,向上/下time_handler.Init.Period = 5000-1;	//自動裝載值,即ARR的值time_handler.Init.Prescaler = 9000-1;//預分配系數,即PSC的值			//定時時間=(Period+1)(Prescaler+1)/Tclk=90000000(9Mhz)//time_handler.Init.ClockDivision=			時鐘分頻因子:定時器時鐘與數字濾波器分頻比//time_handler.Init.RepetitionCounter=		重復計數次數:高級定時器使用HAL_TIM_Base_Init(&time_handler);
}void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
{if(htim->Instance == TIM3){__HAL_RCC_TIM3_CLK_ENABLE();HAL_NVIC_EnableIRQ(TIM3_IRQn);HAL_NVIC_SetPriority(TIM3_IRQn,3,3);HAL_TIM_Base_Start_IT(&time_handler);	//開啟定時器并更新中斷,以后每次更新中斷,都會調用TIM3_IRQHandler}}

HAL_TIM_Base_Init初始化定時器后,會調用HAL_TIM_Base_MspInit函數,我們可以在HAL_TIM_Base_MspInit中使能TIM3,HAL_TIM_Base_MspInit還開啟TIM3中斷以及設置中斷優先級

對于Init參數

  • Instance 可以取值TIM1到TIM14,表示使用哪個定時器
  • CounterMode :計數模式,向上/下
  • Period :自動裝載值,即ARR的值
  • Prescaler :預分配系數,即PSC的值
  • ClockDivision: 時鐘分頻因子,定時器時鐘與數字濾波器分頻比
  • RepetitionCounter:重復計數次數,高級定時器使用

定時時間=(Period+1)(Prescaler+1)/Tclk
Tclk:輸入時鐘頻率,TIM3為90M,計算得出定時時間=0.5s

  1. 開啟定時器中斷,在步驟2中完成
  2. 設置中斷優先級,在步驟2中完成

步驟1-4是配置TIM3定時器中斷,步驟5是來處理TIM3定時器中斷

  1. 編寫中斷服務函數
void TIM3_IRQHandler(void)
{HAL_TIM_IRQHandler(&time_handler);		//HAL定時器中斷通用函數
}//定時器通用更新中斷回調函數
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim->Instance == TIM3){LED1 = !LED1;}}

當定時器TIM3時間到了時,會調用TIM3_IRQHandler函數,每個定時器都用一個中斷服務處理函數,在TIM3_IRQHandler中,我們使用了HAL庫定時器通用處理函數HAL_TIM_IRQHandler,HAL_TIM_IRQHandler內部會調用HAL_TIM_PeriodElapsedCallback更新回調函數,我們在HAL_TIM_PeriodElapsedCallback寫邏輯處理就可以了

main函數調用time_init即可,具體代碼

int main(void)
{//u8 press;HAL_Init();Stm32_Clock_Init(360,25,2,8);delay_init(180);Rcc_Init();LED_Init();KEY_Init();time_init();while(1){}}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379801.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379801.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379801.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

實訓09.09:簡單的彩票系統(自選多注)

package wsq; import java.util.Scanner; public class CustomCaipiao {public static void main(String[] args) {/** 用戶自選彩票數字: 1.使用scanner來輸入彩票號碼! 2.直接寫成自選多注,注數由用戶輸入決定;* 3.紅球值1-33,不重復;藍球值1-16;*/// 定義二維數組 存儲所有的…

c ++查找字符串_C ++類和對象| 查找輸出程序| 套裝4

c 查找字符串Program 1: 程序1&#xff1a; #include <iostream>using namespace std;class Sample {int X;int* const PTR &X;public:void set(int x);void print();};void Sample::set(int x){*PTR x;}void Sample::print(){cout << *PTR - EOF << …

ASP.NET 泛型類型 Dictionary操作

protected void Page_Load(object sender, EventArgs e){//泛型Dictionary Dictionary<string, string> dit new Dictionary<string, string>();dit.Add("13", "張三");dit.Add("22", "李四");Response.Write("總數…

獨立看門狗---STM32----HAL

基本概念 看門狗解決的問題是什么&#xff1f; 在系統跑飛&#xff08;程序異常執行&#xff09;的情況&#xff0c;是系統復位&#xff0c;程序重新執行。 獨立看門狗適應用于需要看門狗作為一個在主程序之外能夠完全獨立工作&#xff0c;并且對時間精度要求低的場合。 工…

實訓09.09:簡單的彩票系統(注冊信息)

package wsq; import java.util.Scanner;//本文件負責注冊用戶信息 /*用戶注冊信息:1.要求設置賬號和密碼,使用字符串數組2.賬號名不能重復3.密碼需要輸入兩次,兩次密碼輸入一致4.滿足賬號名不重復.且兩次密碼一致,即為注冊成功!!將信息添加到字符串數組中String[][] users ne…

【轉】JAVA生成縮略圖

方法1&#xff1a;[第一種方法比后一種生成的縮略圖要清晰] import javax.imageio.ImageIO;import java.awt.image.BufferedImage;import java.awt.image.ColorModel;import java.awt.image.WritableRaster;import java.awt.*;import java.awt.geom.AffineTransform;import jav…

javascript寫入_如何在JavaScript中寫入HTML元素?

javascript寫入寫入HTML元素 (Writing into an HTML element) To write string/text into an HTML element, we use the following things: 要將字符串/文本寫入HTML元素&#xff0c;我們使用以下內容&#xff1a; There must be an HTML element like paragraph, span, div e…

大話設計模式之設計模式遵循的七大原則

最近幾年來&#xff0c;人們踴躍的提倡和使用設計模式&#xff0c;其根本原因就是為了實現代碼的復用性&#xff0c;增加代碼的可維護性。設計模式的實現遵循了一些原則&#xff0c;從而達到代碼的復用性及增加可維護性的目的&#xff0c;設計模式對理解面向對象的三大特征有很…

IIC通信---EEPROM24C02---STMF4

IIC通信協議 IIC是同步半雙工通信&#xff0c;一個數據線SDA和一個時鐘SCL線&#xff0c;可以接受和發送數據。在CPU與被控IC之間、IC與IC之間進行雙向傳送。 空閑狀態 IIC總線的SDA和SCL兩條信號線同時處于高電平時&#xff0c;規定為總線的空閑狀態。 起始信號 當SCL為高…

實訓09.08:簡單的算法練習

/*final 關鍵字 修飾的變量值 后期不可更改 相當于定義常量常量 &#xff1a;不可更改*/final int a 10;//a 20; 報錯的值不可更改&#xff01;/*輸入函數* */System.out.println("請輸入數字&#xff1a;");Scanner scanner new Scanner(System.in);int b…

讓自己閃亮

轉載于:https://www.cnblogs.com/Gigabyte/archive/2009/01/03/you_can_shine.html

Java中的wait()和sleep()方法之間的區別

Java中的wait()和sleep()方法 (wait() and sleep() methods in Java) First, we will see how wait() method differs from sleep() method in Java? 首先&#xff0c;我們將看到wait()方法與Java中的sleep()方法有何不同&#xff1f; wait()方法 (wait() Method) This metho…

離線使用iPhone SDK文檔的方法

在使用Xcode進行iPhone編程時&#xff0c;有時需要參考iPhone SDK的文檔&#xff0c;不過每次ControlClick后&#xff0c;Xcode都會試圖連接Internet&#xff0c;進行在線讀取。有什么方法能夠把資料下載到硬盤上進行離線閱讀嗎&#xff1f; 答案是肯定的。首先去Xcode的Prefer…

遠程連接sql server 2000服務器的解決方案

遠程連接sql server 2000服務器的解決方案2007-04-07 11:29遠程連接sql server 2000服務器的解決方案   一 看ping 服務器IP能否ping通。   這個實際上是看和遠程sql server 2000服務器的物理連接是否存在。如果不行&#xff0c;請檢查網絡&#xff0c;查看配置&#xff0c…

實訓09.10:HTML簡單表格設計

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>燕雨簡歷</title></head><body><table border"" cellspacing"" cellpadding"" width"400px" height"6…

LCD顯示實驗----STM32f4--HAL

步驟 LCD初始化 LCD_Init(); //LCD初始化此函數在lcd.c文件里面 2. 設置LCD背景顏色 LCD_Clear(WHITE);此函數在lcd.c文件里面 3. 設置字體顏色 POINT_COLORRED; 寫入要顯示的字體 LCD_ShowString(10,80,240,24,24,"LTDC TEST");LCD_ShowSt…

JavaScript | 使用提示從用戶輸入值

Example 1) Input name and print 示例1)輸入名稱和打印 Code (JS & HTML): 代碼(JS和HTML)&#xff1a; <!DOCTYPE html><HTML><HEAD><SCRIPT>var name prompt("Enter Your name:");var msg "Welcome "name;//alert(msg)…

一個游戲程序員的學習資料 (zz)

一個游戲程序員的學習資料//z 2012-4-19 14:39:51 PM IS2120CSDN想起寫這篇文章是在看侯杰先生的《深入淺出MFC》時, 突然覺得自己在大學這幾年關于游戲編程方面還算是有些心得&#xff0c;因此寫出這篇小文,介紹我眼中的游戲程序 員的書單與源代碼參考。一則是作為自己今后兩年…

項目管理中工作分解結構模型(WBSM)的應用

摘要 本文根據工作分解結構(WBS)的工作特點&#xff0c;運用系統工程的思想理論方法&#xff0c;構建了工作分解結構模型&#xff0c;并提出了模型算法;該模型方法的建立使得WBS工作更加簡單可靠、思路清晰、基于更加可靠的科學基礎之上。 1、工作分解結構模型(WBSM)方法工作程…

實訓09.11:java重點內容介紹

package test;/** * OP:面向對象的簡稱* 類&#xff1a;同一特征的屬性* * 類的定義&#xff1a;具有相同特征和行為的事物的抽象。&#xff08;不具體化&#xff09;* 對象&#xff08;實例對象&#xff09;&#xff1a;具體真實存在的實例。* 類是對象的實例&#xff1a;* *…