STM32F1 的定時(shí)器非常多,由 2 個(gè)基本定時(shí)器(TIM6、TIM7)、4 個(gè)通用定時(shí)器(TIM2-TIM5)和 2 個(gè)高級(jí)定時(shí)器(TIM1、TIM8)組成。
1、定時(shí)器有哪些,以及對(duì)應(yīng)有什么功能
(1)基本定時(shí)器:
功能最為簡(jiǎn)單,類似于 51 單片機(jī)內(nèi)定時(shí)器。
(2)通用定時(shí)器:
是在基本定時(shí)器的基礎(chǔ)上擴(kuò)展而來,增加了輸入捕獲(可以測(cè)量輸入信號(hào)的脈寬)與輸出比較(產(chǎn)生輸出波形)等功能。
(3)高級(jí)定時(shí)器:
是在通用定時(shí)器基礎(chǔ)上擴(kuò)展而來,增加了可編程死區(qū)互補(bǔ)輸出、重復(fù)計(jì)數(shù)器、帶剎車(斷路)功能,這些功能主要針對(duì)工業(yè)電機(jī)控制方面。
2、通用定時(shí)器配置
#include "stm32f10x.h"
uint8_t time_flag = 0;
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;//定義結(jié)構(gòu)體變量
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0; //選擇你要設(shè)置的IO口
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //設(shè)置推挽輸出模式
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//設(shè)置傳輸速率
GPIO_Init(GPIOC,&GPIO_InitStructure); /* 初始化GPIO */
GPIO_SetBits(GPIOC,GPIO_Pin_0); //將LED端口拉高,熄滅所有LED
}
void TIM4_Init(u16 per,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); //使能TIM4時(shí)鐘
TIM_TimeBaseInitStructure.TIM_Period=per; //自動(dòng)裝載值
TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //分頻系數(shù)
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; //時(shí)鐘分頻
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //設(shè)置向上計(jì)數(shù)模式
TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStructure);
TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE); //開啟定時(shí)器中斷
TIM_ClearITPendingBit(TIM4,TIM_IT_Update);
NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn; //定時(shí)器中斷通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//搶占優(yōu)先級(jí)
NVIC_InitStructure.NVIC_IRQChannelSubPriority =3; //子優(yōu)先級(jí)
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
NVIC_Init(&NVIC_InitStructure);
TIM_Cmd(TIM4,ENABLE); //使能定時(shí)器
}
// TIM4中斷函數(shù)
void TIM4_IRQHandler(void)
{
if(TIM_GetITStatus(TIM4,TIM_IT_Update))
{
if(time_flag){
time_flag = 0x00;
}
else{
time_flag = 0xff;
}
}
TIM_ClearITPendingBit(TIM4,TIM_IT_Update);
}
int main( void )
{
LED_Init();
TIM4_Init(1000,36000-1); //定時(shí)500ms
while(1)
{
if( time_flag ){
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
}
else{
GPIO_SetBits(GPIOC,GPIO_Pin_0);
}
}
}
3、測(cè)試驗(yàn)證程序,下載到板子會(huì)看到LED閃爍,程序正常。
--END--
-
定時(shí)器
+關(guān)注
關(guān)注
23文章
3218瀏覽量
113665 -
stm32f1
+關(guān)注
關(guān)注
1文章
56瀏覽量
12133
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論