神舟IV學(xué)習(xí)筆記(七)定時(shí)器中斷流水燈
通用定時(shí)器的功能非常強(qiáng)大,能夠測(cè)量輸入信號(hào)的脈沖長(zhǎng)度(輸入捕獲)或者產(chǎn)生輸出波形(輸出比較和PWM),也能夠用于定時(shí)中斷任務(wù)。其實(shí)系統(tǒng)滴答和實(shí)時(shí)時(shí)鐘功能類似于定時(shí)器。51單片機(jī)也有定時(shí)器,可以使用軟件的方式實(shí)現(xiàn)實(shí)時(shí)時(shí)鐘的功能,就是斷電后會(huì)到初始狀態(tài)了。
神舟IV開(kāi)發(fā)板采用的是STM32F107VCT,內(nèi)部含有多達(dá)10個(gè)定時(shí)器,其中TIM1和TIM8是高級(jí)控制定時(shí)器在APB2總線上,TIM2—TIM7是掛在APB1上的,所以使用起來(lái)要注意的是,開(kāi)啟不同的時(shí)鐘。
我們就用通用定時(shí)器TIM2實(shí)現(xiàn)LED以1s速度流水燈的功能。首先我們看看時(shí)鐘,TIM2掛在APB1總線上,而APB1的最大時(shí)鐘速度為36MHZ。由于系統(tǒng)初始化將APB1的分頻比設(shè)置為2,所以TIM2的時(shí)鐘就是APB1時(shí)鐘的2倍,等于系統(tǒng)時(shí)鐘。TIM2具有16位可編程預(yù)分頻器,范圍可以從1到65536之間。這里我們?cè)O(shè)置分頻比為7200,得到10KHZ的計(jì)數(shù)時(shí)鐘。再設(shè)置自動(dòng)裝載的計(jì)數(shù)值為10000,這樣就得到1s的定時(shí)器間隔,最后使能中斷,配置中斷函數(shù)。
主要代碼為:
static void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/* Set the Vector Table base address at 0x08000000 */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0000);
/* Enable the TIM5 gloabal Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
int main(void)
{
/* Setup STM32 system (clock, PLL and Flash configuration) */
SystemInit();
/* Add your application code here
*/
LED_Configuration();//LED時(shí)鐘和端口配置
TIM2_Configuration();//TIM2時(shí)鐘和端口配置
NVIC_Configuration();//中斷配置
/* Infinite loop */
while (1)
{
}
}
void TIM2_IRQHandler(void)//定時(shí)器中斷函數(shù)
{
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
LED_Spark();//led流水燈
}
}