STM32F2xx的定時(shí)器的應(yīng)用
定時(shí)器計(jì)數(shù)值的確定。
TIMER的時(shí)鐘不是直接來(lái)源于APB1或者APB2,而是來(lái)自經(jīng)過(guò)APB1或者APB2一個(gè)倍頻器后的時(shí)鐘。當(dāng)APBx的預(yù)分頻數(shù)為1時(shí),這個(gè)倍頻器不起作用,此時(shí)定時(shí)器的時(shí)鐘頻率等于APBx的頻率;當(dāng)APBx倍頻數(shù)為其他數(shù)值時(shí)(即預(yù)分頻數(shù)位2,4,8,16時(shí)),這個(gè)倍頻數(shù)起作用,定時(shí)器時(shí)鐘為APBx的兩倍。例如AHB=60MHz,APB1為AHB的2分頻,即為30MHz,則掛載在APB1下的時(shí)鐘的頻率為60MHz(2倍頻)。
各個(gè)功能定時(shí)器的比較表。
Timer分布
TIM號(hào)
引腳映射
說(shuō)明
TIMER
TIM1
TIM1_BKIN-PA6
TIM1_CH1N-PA7
TIM1_CH2N-PB0
TIM1_CH3N-PB1
TIM1_ETR-PE7
TIM1_CH1N-PE8
TIM1_CH1-PE9
TIM1_CH2N-PE10
TIM1_CH2-PE11
TIM1_CH3N-PE12
TIM1_CH3-PE13
TIM1_CH4-PE14
TIM1_BKIN-PE15
TIM1_CH1N-PB13
TIM1_CH2N-PB14
TIM1_CH3N-PB15
TIM1_CH1-PA8
TIM1_CH2-PA9
TIM1_CH3-PA10
TIM1_CH4-PA11
TIM1_ETR-PA12
高級(jí)控制定時(shí)器??勺鳛槿嗔ǖ繮WM波形發(fā)生器。
也可以當(dāng)做普通功能的定時(shí)器。
可以使用以下四種獨(dú)立通道:
1. 輸入捕捉;
2. 輸出比較;
3.PWM發(fā)生器;
4. 單相輸出模式。
TIM2
TIM2_CH1_ETR-PA0
TIM2_CH2-PA1
TIM2_CH3-PA2
TIM2_CH4-PA3
TIM2_CH1_ETR-PA5
TIM2_CH3-PB10
TIM2_CH4-PB11
TIM2_CH1_ETR-PA15
TIM2_CH2-PB3
通用功能定時(shí)器。
32位定時(shí)器,32位自動(dòng)重裝的上升或者下降計(jì)數(shù)器和一個(gè)16位預(yù)分頻器。
TIM3
TIM3_CH1-PA6
TIM3_CH2-PA7
TIM3_CH3-PB0
TIM3_CH4-PB1
TIM3_CH1-PC6
TIM3_CH2-PC7
TIM3_CH3-PC8
TIM3_CH4-PC9
TIM3_CH1-PB4
TIM3_CH2-PB5
通用功能定時(shí)器。
16位定時(shí)器,16位自動(dòng)重裝的上升或者下降計(jì)數(shù)器和一個(gè)16位預(yù)分頻器。
TIM4
TIM4_CH1-PD12
TIM4_CH2-PD13
TIM4_CH3-PD14
TIM4_CH4-PD15
TIM4_CH1-PB6
TIM4_CH2-PB7
TIM4_CH3-PB8
TIM4_CH4-PB9
TIM4_ETR-PE0
通用功能定時(shí)器。
16位定時(shí)器,16位自動(dòng)重裝的上升或者下降計(jì)數(shù)器和一個(gè)16位預(yù)分頻器。
TIM5
TIM5_CH1-PA0
TIM5_CH2-PA1
TIM5_CH3-PA2
TIM5_CH4-PA3
TIM5_CH1_ETR-PH10
TIM5_CH2-PH11
TIM5_CH3-PH12
TIM5_CH4-PI0
通用功能定時(shí)器。
32位定時(shí)器,32位自動(dòng)重裝的上升或者下降計(jì)數(shù)器和一個(gè)16位預(yù)分頻器。
TIM6
基本時(shí)鐘。
主要作為DAC的觸發(fā)器和波形發(fā)生器;也可以用作通用16位定時(shí)器。
TIM7
基本時(shí)鐘。
主要作為DAC的觸發(fā)器和波形發(fā)生器;也可以用作通用16位定時(shí)器。
TIM8
TIM8_ETR-PA0
TIM8_BKIN-PA6
TIM8_CH1N-PA7
TIM8_CH2N-PB0
TIM8_CH3N-PB1
TIM8_CH2N-PB14
TIM8_CH3N-PB15
TIM8_CH1-PC6
TIM8_CH3-PC8
TIM8_CH4-PC9
TIM8_CH1N-PH13
TIM8_CH2N-PH14
TIM8_CH3N-PH15
TIM8_CH4-PI2
TIM8_ETR-PI3
TIM8_BKIN-PI4
TIM8_CH1-PI5
TIM8_CH2-PI6
TIM8_CH3-PI7
高級(jí)控制定時(shí)器。可作為三相六通道PWM波形發(fā)生器。
也可以當(dāng)做普通功能的定時(shí)器。
可以使用以下四種獨(dú)立通道:
1. 輸入捕捉;
2. 輸出比較;
3.PWM發(fā)生器;
4. 單相輸出模式。
TIM9
TIM9_CH1-PE5
TIM9_CH2-PE6
TIM9_CH1-PA2
TIM9_CH2-PA3
基于自動(dòng)重裝的16位上升計(jì)數(shù)器和一個(gè)16位預(yù)分頻器。兩個(gè)獨(dú)立通道??梢宰鳛楹?jiǎn)單的時(shí)鐘基準(zhǔn)。
功能:
1. 輸入捕捉;
2. 輸出比較;
3.PWM發(fā)生器;
4. 單相輸出模式。
TIM10
TIM10_CH1-PF6
TIM10_CH1-PB8
基于自動(dòng)重裝的16位上升計(jì)數(shù)器和一個(gè)16位預(yù)分頻器。1個(gè)獨(dú)立通道??梢宰鳛楹?jiǎn)單的時(shí)鐘基準(zhǔn)。
功能:
1. 輸入捕捉;
2. 輸出比較;
3.PWM發(fā)生器;
4. 單相輸出模式。
TIM11
TIM11_CH1-PF7
TIM11_CH1-PB9
基于自動(dòng)重裝的16位上升計(jì)數(shù)器和一個(gè)16位預(yù)分頻器。1個(gè)獨(dú)立通道??梢宰鳛楹?jiǎn)單的時(shí)鐘基準(zhǔn)。
功能:
1. 輸入捕捉;
2. 輸出比較;
3.PWM發(fā)生器;
4. 單相輸出模式。
TIM12
TIM12_CH1-PH6
TIM12_CH2-PH9
TIM12_CH1-PB14
TIM12_CH2-PB15
基于自動(dòng)重裝的16位上升計(jì)數(shù)器和一個(gè)16位預(yù)分頻器。1個(gè)獨(dú)立通道??梢宰鳛楹?jiǎn)單的時(shí)鐘基準(zhǔn)。
功能:
1. 輸入捕捉;
2. 輸出比較;
3.PWM發(fā)生器;
4. 單相輸出模式。
TIM13
TIM13_CH1-PF8
TIM13_CH1-PA6
基于自動(dòng)重裝的16位上升計(jì)數(shù)器和一個(gè)16位預(yù)分頻器。1個(gè)獨(dú)立通道??梢宰鳛楹?jiǎn)單的時(shí)鐘基準(zhǔn)。
功能:
1. 輸入捕捉;
2. 輸出比較;
3.PWM發(fā)生器;
4. 單相輸出模式。
TIM14
TIM14_CH1-PF9
TIM14_CH1-PA7
基于自動(dòng)重裝的16位上升計(jì)數(shù)器和一個(gè)16位預(yù)分頻器。1個(gè)獨(dú)立通道??梢宰鳛楹?jiǎn)單的時(shí)鐘基準(zhǔn)。
功能:
1. 輸入捕捉;
2. 輸出比較;
3.PWM發(fā)生器;
4. 單相輸出模式。
Independent watchdog
獨(dú)立看門(mén)狗。
基于12位向下計(jì)數(shù)器和八位預(yù)分頻器,可以由獨(dú)立的32K內(nèi)部RC??梢灾餍酒瑪嚯娤掠杉~扣電池繼續(xù)工作。
Window watchdog
窗口看門(mén)狗。
基于7位可以自由運(yùn)行的向下計(jì)數(shù)器。
SysTick timer
主要用于實(shí)時(shí)操作系統(tǒng),也可以用在標(biāo)準(zhǔn)的向下計(jì)數(shù)器。
1.24位向下計(jì)數(shù)器;
2. 重載功能;
3. 當(dāng)計(jì)數(shù)到0產(chǎn)生一個(gè)系統(tǒng)中斷標(biāo)志;
4. 可編程時(shí)鐘資源。
systemtick的時(shí)鐘直接來(lái)源于AHB,而且是24位的定時(shí)時(shí)鐘,一般常用在實(shí)時(shí)操作系統(tǒng)中。定時(shí)非常準(zhǔn)確。以下是systemtick的配置函數(shù),由專(zhuān)門(mén)的中斷void SysTick_Handler(void)。
/**
* @brief SysTick時(shí)鐘配置。
* @note調(diào)用的是系統(tǒng)中的配置函數(shù),將其函數(shù)名改掉而已,便于統(tǒng)一管理。
*只需要在該配置中加入計(jì)數(shù)值即可實(shí)現(xiàn)任意時(shí)間的定時(shí)配置,包括1us。
*
* void SysTick_Handler(void){···}
* @param ticks : 計(jì)數(shù)值。該計(jì)數(shù)值可通過(guò)以下公式求得:AHB_Clk*需要定時(shí)值,
*例如需要定時(shí)1ms,且60MHz的AHB,則計(jì)數(shù)值= 60MHz*1ms = 600000。
* @retval返回配置是否成功標(biāo)志。
*/
60MHz AHB1時(shí)鐘systemtick定時(shí)中斷。
uint32_t BSP_CLK_SysTick_Config(uint32_t ticks)
{
if (ticks > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */
SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; /* set reload register */
NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Cortex-M0 System Interrupts */
SysTick->VAL = 0; /* Load the SysTick Counter Value */
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
SysTick_CTRL_TICKINT_Msk |
SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */
return (0); /* Function successful */
}
30MHz APB1時(shí)鐘10us定時(shí)中斷。
void TIM_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure1;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,