日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 單片機
[導讀]一、STM32通用定時器原理 STM32系列的CPU,有多達8個定時器,其中TIM1和TIM8是能夠產(chǎn)生三對PWM互補輸出的高級定時器,常用于三相電機的驅動,它們的時鐘由APB2的輸出產(chǎn)生。其它6個為普通定時器,時鐘由APB1的輸出產(chǎn)生

一、STM32通用定時器原理

STM32系列的CPU,有多達8個定時器,其中TIM1和TIM8是能夠產(chǎn)生三對PWM互補輸出的高級定時器,常用于三相電機的驅動,它們的時鐘由APB2的輸出產(chǎn)生。其它6個為普通定時器,時鐘由APB1的輸出產(chǎn)生。

下圖是STM32參考手冊上時鐘分配圖中,有關定時器時鐘部分的截圖:

從圖中可以看出,定時器的時鐘不是直接來自APB1或APB2,而是來自于輸入為APB1或APB2的一個倍頻器,圖中的藍色部分。

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

可能有同學還是有點不理解,OK,我們舉一個例子說明。假定AHB=36MHz,因為APB1允許的最大頻率為36MHz,所以APB1的預分頻系數(shù)可以取任意數(shù)值;

當預分頻系數(shù)=1時,APB1=36MHz,TIM2~7的時鐘頻率=36MHz(倍頻器不起作用);

當預分頻系數(shù)=2時,APB1=18MHz,在倍頻器的作用下,TIM2~7的時鐘頻率=36MHz。

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

Stm32外設用戶手冊,如圖:

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

二、STM32通用定時器編程

定時器編程,就是中斷的編程。因為使用定時器必定要使用到中斷。

步驟一:RCC_Configuration();//設置系統(tǒng)時鐘,包括時鐘RCC的配置,倍頻到72MHZ。

步驟二:GPIO的配置,使用函數(shù)為GPIO_cfg();,該函數(shù)的實現(xiàn)如下:


voidGPIO_cfg()

{

GPIO_InitTypeDefGPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD,ENABLE);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;//選擇引腳6

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//輸出頻率最大50MHz

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//帶上拉電阻輸出

GPIO_Init(GPIOC,&GPIO_InitStructure);

}


實際上定時器的講解,不需要配置GPIO的引腳,只是我們在定時器實驗中,

使用每隔一秒點亮一次LED燈來做實驗,所以需要配置對應GPIO的引腳。

步驟三:嵌套中斷控制器的配置,我們照樣使用函數(shù)NVIC_Config();只是初始化的過程略有不同。這里我們也把函數(shù)實現(xiàn)列出來:

從以上函數(shù)實現(xiàn)來看,實際上只是改動了結構體成員NVIC_IRQChannel的值,現(xiàn)在需要的通道是TIM2的通道,因此初始化值為TIM2_IRQChannel。從這里也可以看出,這個函數(shù)實際上可以看做一個模型,可以拿去別的程序中改動后直接使用。

voidNVIC_cfg()

{

NVIC_InitTypeDefNVIC_InitStructure;

//選擇中斷分組1

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

//選擇TIM2的中斷通道

NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQChannel;

//搶占式中斷優(yōu)先級設置為0

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;

//響應式中斷優(yōu)先級設置為0

NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;

//使能中斷

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

NVIC_Init(&NVIC_InitStructure);

}


步驟四:定時器的初始化配置,使用Timer_Config();。OK,關鍵部分出來了。

我們來看下實現(xiàn)過程:


TIMER_cfg();//定時器的配置

//開啟定時器2

TIM_Cmd(TIM2,ENABLE);

voidTimer_Config(void)

{

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);

TIM_DeInit(TIM2);

TIM_TimeBaseStructure.TIM_Period=2000-1;//自動重裝載寄存器的值

TIM_TimeBaseStructure.TIM_Prescaler=(36000-1);//時鐘預分頻數(shù)

TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;//采樣分頻

TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//向上計數(shù)模式

TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);

TIM_ClearFlag(TIM2,TIM_FLAG_Update);//清除溢出中斷標志

TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);

TIM_Cmd(TIM2,ENABLE);/開啟時鐘

}

我們每個語句都來解釋一下。首先我們想使用定時器,就必須使能定時器的時鐘,這就是函數(shù)RCC_APB1PeriphClockCmd();,通過它開啟RCC_APB1Periph_TIM2。

TIM_DeInit(TIM2);該函數(shù)主要用于復位TIM2定時器,使之進入初始狀態(tài)。

然后我們對自動重裝載寄存器賦值,TIM_Period的大小實際上表示的是需要經(jīng)過TIM_Period次計數(shù)后才會發(fā)生一次更新或中斷。接下來需要設置時鐘預分頻數(shù)TIM_Prescaler,這里有一個公式,我們舉例來說明:例如時鐘頻率=72MHZ/(時鐘預分頻+1)。說明當前設置的這個TIM_Prescaler,直接決定定時器的時鐘頻率。通俗點說,就是一秒鐘能計數(shù)多少次。比如算出來的時鐘頻率是2000,也就是

一秒鐘會計數(shù)2000次,而此時如果TIM_Period設置為4000,即4000次計數(shù)后就會中斷一次。由于時鐘頻率是一秒鐘計數(shù)2000次,因此只要2秒鐘,就會中斷一次。

再往后的代碼,還有一個需要注意的,TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;就是我們一般采用向上計數(shù)模式,即每次計數(shù)就會加1,直到寄存器溢出發(fā)生中斷為止。最后別忘了,需要使能定時器??!

發(fā)生中斷時間=(TIM_Prescaler+1)* (TIM_Period+1)/FLK

用上述公式可算出:發(fā)生中斷時間 (2000-1+1)*(36000-1+1)/72000000=1 秒

步驟五:編寫中斷服務程序。同樣需要注意的,一進入中斷服務程序,第一步要做的,就是清除掉中斷標志位。由于我們使用的是向上溢出模式,因此使用

的函數(shù)應該是:TIM_ClearITPendingBit(TIM2,TIM_FLAG_Update);。

STM32開發(fā)板實現(xiàn)的中斷服務程序如下:

每隔一秒,發(fā)生中斷時,進入此中斷函數(shù)執(zhí)行程序,讓LED閃一下,此中斷程序所在文件stm32f10x_it.c


/*******************************************************************************

*FunctionName:TIM2_IRQHandler

*Description:ThisfunctionhandlesTIM2globalinterruptrequest.

*Input:None

* Output : None

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據(jù)LED驅動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉