STM32——定時器

一、簡介

*定時器可以對輸入的時鐘進行計數,并在計數值達到設定值時觸發中斷

*16位計數器、預分頻器、自動重裝寄存器的時基單元,在72MHz計數時鐘下可以實現最大59.65s的定時?

*不僅具備基本的定時中斷功能,而且還包含內外時鐘源選擇、輸入捕獲、輸出比較、編碼器接口、主從觸發模式等多種功能

*根據復雜度和應用場景分為了高級定時器、通用定時器、基本定時器三種類型

二、定時器區別

1.通用定時器的特點描述

1.位于ABP1低速總線上

2.16位向下,向上/向下(中心對齊模式)計數模式,自動重裝載計數器(TIMx_CNT)

3.16位可編程(可以實現修改)預分頻器(TIMx_PSC),計數器時鐘頻率的分頻系數為1~65535任意數值

4.四個獨立通道(TIMx_CH1~4),通道用來支持:

①輸入捕獲

②輸出比較

③PWM生成

④單脈沖模式輸出

2.通用定時器的計數器模式

STM32通用定時器 可以向上,向下,向上/向下雙向計數模式 :

① 向上計數模式:計數值從0 計數到自動加載值(TIM_ARR),產生一個計數溢出事件,然后重新從0開始計數

②向下計數模式:計數器從自動裝入的值(TIM_ARR)開始向下計數到0,產生一個計數溢出事件,然后從計數裝入值重新開始。

③中央對齊模式:計數器從0開始到(自動裝入值-1),產生計數溢出事件,然后向下計數到1,產生定時器溢出事件,然后從0開始計數。

預分頻器可以將計數器的時鐘頻率按1到65536之間的任意值分頻。

ARR是自動重裝載值(自己設定的)

CNT計數當前值(0到自動重裝載值中間的某個值)

CCRX比較寄存器值

PSC是預分頻系數

內部時鐘源(CK_INT)

三、計數器時鐘計算方法

預分頻寄存器 :分頻系數 ? ?(PSC+1) / N = CNT?

定時器配置LED每秒閃爍一次:

Tout = ? ?[ ?重裝載值(ARR+1) * 分頻系數(PSC+1)]? /Tclk

Tout = ?100000(9999+1) *7200(分頻系數 ?7199+1) ??/72M(72 000 000)

計數器計數頻率:CK_CNT = CK_PSC / (PSC + 1)

計數器溢出頻率:CK_CNT_OV = CK_CNT / (ARR + 1) ??= CK_PSC / (PSC + 1) / (ARR + 1)

四、輸入PWM模式

PWM模式1:

向上計數時,一旦TIMx_CNT<TIMx_CCR1時通道1為有效電平,否則為無效電平;
向下計數時,一旦TIMx_CNT>TIMx_CCR1時通道1為無效電平,否則為有效電平。


PWM模式2:

向上計數時,一旦TIMx_CNT<TIMx_CCR1時通道1為無效電平,否則為有效電平;
向下計數時,一旦TIMx_CNT>TIMx_CCR1時通道1為有效電平,否則為無效電平。

五、代碼

PWM:

?
void motor_init(void)
{TIM_TimeBaseInitTypeDef   TIM_MotorInitStruct;GPIO_InitTypeDef   Motor_init;TIM_OCInitTypeDef   TIMPWMMotorinit;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);//結構體配置 (需要放在前面)   //gpio.hMotor_init.GPIO_Mode  =GPIO_Mode_AF_PP; //推挽復用輸出Motor_init.GPIO_Pin   =GPIO_Pin_6;Motor_init.GPIO_Speed =GPIO_Speed_50MHz;GPIO_Init(GPIOA,&Motor_init);Motor_init.GPIO_Mode  =GPIO_Mode_AF_PP; //推挽復用輸出Motor_init.GPIO_Pin   =GPIO_Pin_5|GPIO_Pin_0|GPIO_Pin_1;Motor_init.GPIO_Speed =GPIO_Speed_50MHz;GPIO_Init(GPIOB,&Motor_init);TIM_MotorInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;  // 設置時鐘分割   不分頻TIM_MotorInitStruct.TIM_CounterMode=  TIM_CounterMode_Up; //TIM向上計數模式TIM_MotorInitStruct.TIM_Period= 200-1;  //ARR(199+1)TIM_MotorInitStruct.TIM_Prescaler=7200-1;  //PSC(7199+1)TIM_TimeBaseInit(TIM3, &TIM_MotorInitStruct);TIMPWMMotorinit.TIM_OCMode    =TIM_OCMode_PWM2;       //選擇定時器模式1TIMPWMMotorinit.TIM_OutputState =TIM_OutputState_Enable;        //比較輸出使能1TIMPWMMotorinit.TIM_OCPolarity  =TIM_OCPolarity_High;     //預裝載寄存器    選擇有效輸出極性//TIM_OC1Init(TIM3, &TIMPWMMotorinit);
//	TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable );	//tim3  1TIM_OC2Init(TIM3, &TIMPWMMotorinit);TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable );	//2TIM_OC3Init(TIM3, &TIMPWMMotorinit);TIM_OC3PreloadConfig(TIM3,TIM_OCPreload_Enable );	//tim3 	TIM_OC4Init(TIM3, &TIMPWMMotorinit);TIM_OC4PreloadConfig(TIM3,TIM_OCPreload_Enable );	//tim4TIM_Cmd(TIM3, ENABLE);}?

定時器:

void tim_config(void)
{TIM_TimeBaseInitTypeDef timInit;//定義初始化定時器結構體名NVIC_InitTypeDef NVICInit;		//定義中斷的結構體名//1.使能時鐘 定時器時鐘RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM2, ENABLE);TIM_InternalClockConfig(TIM2);			 // 配置定時器2為內部時鐘模式TIM_ClearFlag(TIM2, TIM_FLAG_Update);// 清除更新時的中斷標志位,防止更新時程序直接進入中斷TIM_ITConfig(TIM2, TIM_IT_Update,ENABLE);						//定時器中斷配置//2.配置tim的結構體timInit.TIM_Period = 10000-1;					//設置自動重裝載值timInit.TIM_CounterMode = TIM_CounterMode_Up;   //配置計數模式 為向上timInit.TIM_Prescaler = 7200 -1 ;				//配置分頻系數的值(計數器時鐘的分頻系數)timInit.TIM_ClockDivision = TIM_CKD_DIV1;       //(內部時鐘分頻)設置分頻系數為1,不分頻TIM_TimeBaseInit(TIM2, &timInit);				//調用初始化函數//定時時間=(重裝載值+1)*(計數器分頻系數的值+1)/定時器的時鐘:10000*7200/72000000(72M)//3.打開定時器中斷,配置中斷結構體NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);	//配置優先級組,才可以進行搶占優先級和響應優先級設置NVICInit.NVIC_IRQChannel = TIM2_IRQn;NVICInit.NVIC_IRQChannelPreemptionPriority = 1;NVICInit.NVIC_IRQChannelSubPriority = 1;NVICInit.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVICInit);TIM_Cmd(TIM2, ENABLE);//4.中斷服務函數 
}

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

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

相關文章

基于SpringBoot的本科生考研率統計系統

基于SpringBoot的本科生考研率統計系統 一、開發技術二、功能模塊三、代碼結構四、數據庫設計五、運行截圖六、源碼獲取 一、開發技術 技術&#xff1a;SpringBoot、MyBatis-Plus、Redis、MySQL、Thymeleaf、Html、Vue、Element-ui。 框架&#xff1a;基于開源框架easy-admin開…

景源暢信:抖音小店新手小白如何做好運營?

在數字時代的浪潮中&#xff0c;抖音小店成為了眾多創業者和商家的新寵。但面對激烈的市場競爭和不斷變化的平臺規則&#xff0c;新手小白如何才能在抖音小店的海洋里穩健航行&#xff0c;捕捉到屬于自己的商機呢?接下來的內容將為你揭曉答案。 一、精準定位&#xff0c;明確目…

視頻監控平臺AS-V1000 的場景管理,一鍵查看多畫面視頻的場景配置、調用、管理(一鍵瀏覽多路視頻)

目錄 一、場景管理的定義 二、場景管理的功能和特點 1、功能 &#xff08;1&#xff09;場景配置 &#xff08;2&#xff09;實時監控 &#xff08;3&#xff09;權限管理 2、特點 三、AS-V1000的場景配置和調用 1、場景配置 &#xff08;1&#xff09;實時視頻預覽 …

React@16.x(12)ref 轉發-forwardRef

目錄 1&#xff0c;介紹2&#xff0c;類組件如何使用4&#xff0c;應用場景-高階組件HOC 1&#xff0c;介紹 上篇文章中提到&#xff0c;ref 只能對類組件使用&#xff0c;不能對函數組件使用。 而 ref 轉發可以對函數組件實現類似的功能。 使用舉例&#xff1a; import Re…

為什么選擇CleanMyMac軟件呢?推薦理由

你是否曾經遇到過這樣的問題&#xff1a;電腦運行緩慢&#xff0c;存儲空間不足&#xff0c;不知道如何清理垃圾文件&#xff1f;別擔心&#xff0c;我們為你找到了解決方案——CleanMyMac軟件。這款強大的工具可以幫助你輕松解決這些問題&#xff0c;讓你的電腦煥然一新&#…

深入理解Python中的包與模塊

新書上架~&#x1f447;全國包郵奧~ python實用小工具開發教程http://pythontoolsteach.com/3 歡迎關注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目錄 一、包的概述與功能 代碼案例&#xff1a;包的結構 二、模塊的劃分與組合 劃分模塊的方法…

開源內網穿透神器:中微子代理(neutrino-proxy)實現內網穿刺

&#x1f604; 19年之后由于某些原因斷更了三年&#xff0c;23年重新揚帆起航&#xff0c;推出更多優質博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有堅忍不拔之志 &#x1f390; 個人CSND主頁——Mi…

dubbo復習:(10)使用tripple協議進行通信

一、pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.…

場景文本檢測識別學習 day10(MMdetection)

配置文件(config) 由于在大型項目中&#xff0c;一種模型需要分&#xff1a;tiny、small、big等很多種&#xff0c;而它們的區別主要在網絡結構&#xff0c;數據的加載&#xff0c;訓練策略等&#xff0c;且差別很多都很小&#xff0c;所以如果每個模型都手動從頭寫一份&#…

ChatGPT原創指令大全(持續更新)

隨著ChatGPT在互聯網上的使用越來越多&#xff0c;但很多人在使用ChatGPT的過程中會覺得得到的答案并不是很精準。究其原因其實是你給它的命令不夠準確、不夠到位。實際現在網上已經很多關于ChatGPT的網站&#xff0c;可以快速生成帶有快捷鍵的ChatGPT指令。但是對于不熟悉Chat…

LeetCode 2951.找出峰值:模擬(遍歷)

【LetMeFly】2951.找出峰值&#xff1a;模擬&#xff08;遍歷&#xff09; 力扣題目鏈接&#xff1a;https://leetcode.cn/problems/find-the-peaks/ 給你一個下標從 0 開始的數組 mountain 。你的任務是找出數組 mountain 中的所有 峰值。 以數組形式返回給定數組中 峰值 的…

視創云展「VR直播」是什么?有哪些功能和應用場景?

視創云展「VR直播」通過“3D沉浸式展廳直播高互動感”的創新玩法&#xff0c;使企業隨時隨地舉辦一場低成本、高互動、能獲客的元宇宙直播活動成為可能。「VR直播」能實現3D展廳內VR場景漫游&#xff0c;更結合音視頻交互、同屏互動等新功能&#xff0c;為用戶帶來更沉浸的虛擬…

Java基礎之 API 字符串

文章目錄 API字符串String概述創建對象 java的內存模型java的常用方法(比較)練習 API 概念: APl(Application ProgrammingInterface): 應用程序編程接口 簡單理解: API就是別人已經寫好的東西&#xff0c;我們不需要自己編寫&#xff0c;直接使用即可。 Java API: 指的就是J…

馬斯克的 xAI 帝國!60億融資背后的超級布局?

在全球科技競技場&#xff0c;每個重大融資事件都是對行業格局的一次重塑。近日&#xff0c;埃隆馬斯克的人工智能初創企業 xAI 成功完成了一輪規模空前的融資——60億美元&#xff0c;此舉無疑在業界投下了一枚震撼彈&#xff0c;標志著 AI 領域內一場新的競賽拉開了序幕。 …

旅游卡在哪里拿貨?千益暢行旅游卡源頭

旅游卡是一種便捷的旅行工具&#xff0c;它可以提供多種優惠和特惠&#xff0c;讓人們在旅行中更加省錢、省心。那么&#xff0c;在千益暢行旅游卡這里&#xff0c;我們該如何拿到這張神奇的旅游卡呢&#xff1f; 首先&#xff0c;千益暢行旅游卡作為一款專為旅行愛好者打造的…

QT學習(20):QStyle類

Qt包含一組QStyle子類&#xff0c;這些子類&#xff08;QWindowsStyle&#xff0c;QMacStyle等&#xff09;模擬Qt支持的不同平臺的樣式&#xff0c;默認情況下&#xff0c;這些樣式內置在Qt GUI模塊中&#xff0c;樣式也可以作為插件提供。 Qt的內置widgets使用QStyle來執行幾…

LangChain之鏈的應用(下)

LangChain之鏈的應用 Chain鏈的應用配置LLMChain&#xff1a;簡單鏈create_stuff_documents_chain&#xff1a;文檔鏈create_extraction_chain&#xff1a;提取信息鏈LLMMathChain&#xff1a;數學鏈create_sql_query_chain&#xff1a;SQL查詢鏈連接數據庫創建并使用鏈 Sequen…

K210 數字識別 教程

一、燒寫固件 連接k210開發板&#xff0c;點開燒錄固件工具&#xff0c;選中固件&#xff0c;并下載 二、模型訓練 網站&#xff1a;MaixHub 1、上傳文件 2、開始標記數據 添加9個標簽&#xff0c;命名為1~9&#xff0c;按鍵盤w開始標記&#xff0c;鍵盤D可以下一張圖片&…

計算機網絡(1

網絡初識 目錄 網絡初識一. 網絡分類1. 局域網LAN(Local Area Network):2. 廣域網WAN(Wide Area Network): 二. 組建網絡的基礎設備1. 路由器2. 交換機 三. 標識符 協議 (protocol)一. 協議分層1. 分層的好處2. OSI七層分層3. TCP/IP五層模型(或四層) 模型(1. 物理層(可不算)(2…

6.8 LIBBPF API(七,bpf_core_read.h 函數,定義,枚舉)

一,函數 void * bpf_rdonly_cast (const void *obj, __u32 btf_id) __ksym __weak 二,定義 __CORE_RELO(src, field, info) __builtin_preserve_field_info((src)->field,BPF_FIELD_##info) __CORE_BITFIELD_PROBE_READ(dst, src, fld) bpf_probe_read_kernel( \ (v…