stm32定時器配置

stm32通用定時器

?STM32的定時器是個強大的模塊,定時器使用的頻率也是很高的,定時器可以做一些基本的定時,還可以做PWM輸出或者輸入捕獲功能。

時鐘源問題:

名為TIMx的有八個,其中TIM1和TIM8掛在APB2總線上,而TIM2-TIM7則掛在

APB1總線上。其中TIM1&TIM8稱為高級控制定時器(advanced control timer).他們所在的APB2總線也比APB1總線要好。APB2可以工作在72MHz下,而APB1最大是36MHz。

定時器的時鐘不是直接來自APB1或APB2,而是來自于輸入為APB1或APB2的一個倍頻器。

下面以定時器2~7的時鐘說明這個倍頻器的作用:當APB1的預分頻系數為1時,這個倍頻器不起作用,定時器的時鐘頻率等于APB1的頻率;當APB1的預分頻系數為其它數值(即預分頻系數為2、4、8或16)時,這個倍頻器起作用,定時器的時鐘頻率等于APB1的頻率兩倍。

假定AHB=36MHz,因為APB1允許的最大頻率為36MHz,所以APB1的預分頻系數可以取任意數值;當預分頻系數=1時,APB1=36MHz,TIM2~7的時鐘頻率=36MHz(倍頻器不起作用);當預分頻系數=2時,APB1=18MHz,在倍頻器的作用下,TIM2~7的時鐘頻率=36MHz。

有人會問,既然需要TIM2~7的時鐘頻率=36MHz,為什么不直接取APB1的預分頻系數=1?答案是:APB1不但要為TIM2~7提供時鐘,而且還要為其它外設提供時鐘;設置這個倍頻器可以在保證其它外設使用較低時鐘頻率時,TIM2~7仍能得到較高的時鐘頻率。

再舉個例子:當AHB=72MHz時,APB1的預分頻系數必須大于2,因為APB1的最大頻率只能為36MHz。如果APB1的預分頻系數=2,則因為這個倍頻器,TIM2~7仍然能夠得到72MHz的時鐘頻率。能夠使用更高的時鐘頻率,無疑提高了定時器的分辨率,這也正是設計這個倍頻器的初衷。

?


TIM通用定時器配置步驟:

1.配置TIM時鐘  

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);

2.定時器基本配置

void TIM2_Configuration(void)
{
?? TIM_TimeBaseInitTypeDef? TIM_TimeBaseStructure;
??? //? TIM_OCInitTypeDef? TIM_OCInitStructure ;
??? TIM_DeInit(TIM2);????????????????????????????? //復位TIM2定時器
????????
??? /* TIM2 configuration */
??? TIM_TimeBaseStructure.TIM_Period = 5;??????? // 2.5ms?????
??? TIM_TimeBaseStructure.TIM_Prescaler = 36000;??? // 分頻36000???????
??? TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;? // 時鐘分頻??
??? TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;? //計數方向向上計數
??? TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

??? /* Clear TIM2 update pending flag[清除TIM2溢出中斷標志] */
??? TIM_ClearFlag(TIM2, TIM_FLAG_Update);

??? /* Enable TIM2 Update interrupt [TIM2溢出中斷允許]*/
??? TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);?

??? /* TIM2 enable counter [允許tim2計數]*/
??? TIM_Cmd(TIM2, ENABLE);???????
}

TIM_Period設置了在下一個更新事件裝入活動的自動重裝載寄存器周期的值。它的取值必須在0x0000和0xFFFF之間。

TIM_Prescaler設置了用來作為TIMx時鐘頻率除數的預分頻值。它的取值必須在0x0000和0xFFFF之間。

TIM_ClockDivision的作用是做一段延時,一般在特殊場合的時候會用到,可不關心。

TIM_CounterMode選擇了計數器模式。

    TIM_CounterMode_Up
    TIM向上計數模式
    TIM_CounterMode_Down
    TIM向下計數模式
    TIM_CounterMode_CenterAligned1?? TIM中央對齊模式1計數模式
    TIM_CounterMode_CenterAligned2?? TIM中央對齊模式2計數模式
    TIM_CounterMode_CenterAligned3?? TIM中央對齊模式3計數模式

單片機時鐘頻率72MHz,APB1 二分頻36MHz,故TIM2自動2倍頻至72MHz,故定時器中斷頻率為72000000/36000/5=400Hz

3.使能定時器中斷TIM_Cmd(TIM2, ENABLE);

4.配置NVIC。

??? NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel;
??? NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
??? NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4;??
??? NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
??? NVIC_Init(&NVIC_InitStructure);

5.寫中斷函數

void TIM2_IRQHandler(void)

{

......//中斷處理

} ?

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

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

相關文章

SQL 養成一個好習慣是一筆財富

來源:MR_ke 鏈接:http://www.cnblogs.com/MR_ke/archive/2011/05/29/2062085.html 我們做軟件開發的,大部分人都離不開跟數據庫打交道,特別是erp開發的,跟數據庫打交道更是頻繁,存儲過程動不動就是上千行&a…

【JAVA】StringTokenizer 迭代方式對字符串進行分割

StringTokenizer是一個用來分隔String的應用類,相當于VB的split函數。1.構造函數public StringTokenizer(String str)public StringTokenizer(String str, String delim)public StringTokenizer(String str, String delim, boolean returnDelims)第一個參數就是要分…

python數組定義_python定義數組

廣告關閉 騰訊云11.11云上盛惠 ,精選熱門產品助力上云,云服務器首年88元起,買的越多返的越多,最高返5000元! 一、一維數組 1. 直接定義matrix2. 間接定義matrixprint(matrix)輸出:3. 數組乘法matrix*5print…

Android-語言設置流程分析

Android手機語言切換行為,是通過設置-語言和輸入法-語言來改變手機的語言,其實這個功能很少被用戶使用。 以Android5.1工程源碼為基礎,從設置app入手來分析和學習語言切換的過程:一、語言設置界面:首先在設置app中找到語言設置這個Preference…

charles 安裝 ssl_最全面的解決Charles手機抓包的證書問題(步驟非常詳細)

源自公眾號文章: 徹底解決Charles手機抓包的證書問題簡介: Charles 抓包是日常開發當中經常會用到的技術, 在 Android 6 之前, 手機系統既信任系統內置的證書, 也信任用戶自己安裝的證書, 但是在 Android 7 之后, 卻發生了變化, 手機系統只信任系統內置的根證書. 當然了, 這是為…

oracle報錯:ORA-00054: 資源正忙,要求指定 NOWAIT

ORA-00054: 資源正忙, 但指定以 NOWAIT 方式獲取資源: --首先得到被鎖對象的session_idselect session_id from v$locked_object; --通過上面得到的session_id去取得v$session的sid和serial#,然后對該進程進行終止。--SELECT sid, serial#, username, o…

ARM中ROM,RAM,FLASH區別

RAM(Random Access Memory)的全名為隨機存取記憶體,它相當于PC機上的移動存儲,用來存儲和保存數據的。它在任何時候都可以讀寫,RAM通常是作為操作系統或其他正在運行程序的臨時存儲介質(可稱作系統內存&…

excel 2007 vba與宏完全剖析_Excel宏VBA小技巧系列 | 分段加合

寫在前面的話 知識產權算是一個盛產數據的行業。專利啊商標啊著作啊,都有著錄項目。我們常說的專利分析、產業導航、企業導航、產業預警、競爭情報、技術綜述、知識產權評議等等,常規操作之一就要先處理著錄項目數據,然后再進行不同角度的分…

SecureCRT:保存輸出日志的方法

處理地址: http://blog.sina.com.cn/s/blog_64c1dd210101gzgz.html 或者: http://renchen.blog.51cto.com/4531967/1195862 重點在與設定文檔的文件名稱,里面有說明。 http://renchen.blog.51cto.com/4531967/1195862轉載于:https://www.cnbl…

redhat虛擬機安裝

做過好多使用VMware workstation虛擬機搭建的系統,這是我第一次使用Virtual Box,感覺跟Vmware差不多,我的本子的系統是win7 64位。 下面演示安裝的是在VirtualBox里安裝rhel 6.4 linux 64位系統。 一、VirtualBOX 版本。 二、虛擬機的配置。…

mysql 查看表v空間自增漲_MySQL InnoDB表空間加密

從 MySQL5.7.11開始,MySQL對InnoDB支持存儲在單獨表空間中的表的數據加密 。此功能為物理表空間數據文件提供靜態加密。該加密是在引擎內部數據頁級別的加密手段,在數據頁寫入文件系統時加密,加密用的是AES算法,而其解密是在從文件…

arm之mmu原理

實驗目的:啟用MMU,映射SDRAM的地址空間,操作虛擬地址實現“點燈大法”,借此掌握MMU的使用。實驗環境及說明:恒頤S3C2410開發板H2410。H2410核心板擴展有64MB的K4S561632 SDRAM(4M*16bit*4BANK),地址范圍是0…

osal_start_timerEx(Lock_TaskID,SBP_START_DEVICE_EVT,SBP_PERIODIC_EVT_PERIOD)的理解

osal_start_timerEx(Lock_TaskID,SBP_START_DEVICE_EVT,SBP_PERIODIC_EVT_PERIOD)與osal_set_event(Music_TaskID,event)的區別是osal_start_timerEx周期性的一直推送事件周期時間由SBP_PERIODIC_EVT_PERIOD決定,而osal_set_event是只推送一次。osal_start_timerEx開…

ideaspringboot項目上傳服務器_PHP中使用 TUS 協議來實現可恢復文件上傳

曾經嘗試過用PHP上傳大文件嗎?想知道您是否可以從上次中斷的地方繼續上傳,而不會在遇到任何中斷的情況下再次重新上傳整個數據?如果您覺得這個場景很熟悉,請接著往下閱讀。文件上傳是我們幾乎所有現代Web項目中的一項很常見的任務…

無密碼登陸

server A /B以root賬戶在A上無密碼ssh到B方式一ON A:ssh-keygen -t dsa -P -f ~/.ssh/id_dsa cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys chmod 644 ~/.ssh/authorized_keys service sshd restart ON B:ssh-keygen -t dsa -P -f ~/.ssh/id_dsa cat ~/.ssh/id_d…

嵌入式常見筆試題總結

預處理器(Preprocessor)1. 用預處理指令#define 聲明一個常數,用以表明1年中有多少秒(忽略閏年問題) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在這想看到幾件事情: 1). #define 語法的基本知識…

【轉】php利用mkdir創建多級目錄

先介紹一下 mkdir() 這個函數: mkdir($path,0777,true); 第一個參數:必須,代表要創建的多級目錄的路徑; 第二個參數:設定目錄的權限,默認是 0777,意味著最大可能的訪問權; 第三個參數…

java使用xml存儲數據_用存儲過程和 JAVA 寫報表數據源有什么弊端?

用存儲過程和 JAVA 寫報表數據源有什么弊端?跟著小編一起來一看一下吧!我們在報表開發中經常會使用存儲過程準備數據,存儲過程支持分步計算,可以實現非常復雜的計算邏輯,為報表開發帶來便利。所以,報表開發…

GIT文件的三種狀態

對于任何一個文件,在 Git 內都只有三種狀態:已提交(committed),已修改(modified)和已暫存(staged)。已提交表示該文件已經被安全地保存在本地數據庫 中了;已修…

嵌入式常見筆試題總結(2)

預處理器(Preprocessor)   1. 用預處理指令#define 聲明一個常數,用以表明1年中有多少秒(忽略閏年問題)   #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL   我在這想看到幾件事情:   1). #…