久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > STM32學習筆記(4):通用定時器基本定時功能

STM32學習筆記(4):通用定時器基本定時功能

作者: 時間:2016-11-28 來源:網絡 收藏

//使能預取指緩存

FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

//設置PLL時鐘,為HSE的9倍頻8MHz * 9 = 72MHz

RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

//使能PLL

RCC_PLLCmd(ENABLE);

//等待PLL準備就緒

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);

//設置PLL為系統時鐘源

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

//判斷PLL是否是系統時鐘

while(RCC_GetSYSCLKSource() != 0x08);

}

//允許TIM2的時鐘

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);

//允許GPIO的時鐘

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

}

void TIMER_cfg()

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

//重新將Timer設置為缺省值

TIM_DeInit(TIM2);

//采用內部時鐘給TIM2提供時鐘源

TIM_InternalClockConfig(TIM2);

//預分頻系數為36000-1,這樣計數器時鐘為72MHz/36000 = 2kHz

TIM_TimeBaseStructure.TIM_Prescaler = 36000 - 1;

//設置時鐘分割

TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;

//設置計數器模式為向上計數模式

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

//設置計數溢出大小,每計2000個數就產生一個更新事件

TIM_TimeBaseStructure.TIM_Period = 2000 - 1;

//將配置應用到TIM2中

TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);

//清除溢出中斷標志

TIM_ClearFlag(TIM2, TIM_FLAG_Update);

//禁止ARR預裝載緩沖器

TIM_ARRPreloadConfig(TIM2, DISABLE);

//開啟TIM2的中斷

TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);

}

void NVIC_cfg()

{

NVIC_InitTypeDef NVIC_InitStructure;

//選擇中斷分組1

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

//選擇TIM2的中斷通道

NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel;

//搶占式中斷優先級設置為0

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

//響應式中斷優先級設置為0

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

//使能中斷

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

}

void GPIO_cfg()

{

GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//選擇引腳5

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

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

GPIO_Init(GPIOB,&GPIO_InitStructure);

}

在stm32f10x_it.c中,我們找到函數TIM2_IRQHandler(),并向其中添加代碼

void TIM2_IRQHandler(void)

{

u8 ReadValue;

//檢測是否發生溢出更新事件

if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)

{

//清除TIM2的中斷待處理位

TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update);

//將PB.5管腳輸出數值寫入ReadValue

ReadValue = GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5);

if(ReadValue == 0)

{

GPIO_SetBits(GPIOB,GPIO_Pin_5);

}

else

{

GPIO_ResetBits(GPIOB,GPIO_Pin_5);

}

}

}


上一頁 1 2 下一頁

評論


技術專區

關閉