一、 概述 1、 TIM3簡介 iCore3使用的STM32F407IGT6芯片的具有10個通用定時器,分別為TIM2-TIM5、TIM9-TIM14,可用于定時、計(jì)數(shù)、輸出PWM等。不同的定時器的計(jì)數(shù)方式、計(jì)數(shù)位數(shù)及功能有所不同,實(shí)驗(yàn)中使用的是TIM3,所以只對TIM3進(jìn)行介紹。 2、 TIM3簡介 TIM3是一個16位遞增、遞減和遞增/遞減自動重載計(jì)數(shù)器,16 位可編程預(yù)分頻器,用于對計(jì)數(shù)器時鐘頻率進(jìn)行分頻(即運(yùn)行時修改),分頻系數(shù)介于 1 到 65536 之間,可用于:輸入捕獲、 輸出比較、PWM 生成(邊沿和中心對齊模式)和單脈沖模式輸出。在實(shí)際應(yīng)用中,可以根據(jù)需要進(jìn)行相應(yīng)的配置,使用相應(yīng)的功能。 二、硬件電路 圖12_0 三色LED 在iCore3雙核心開發(fā)板中,三色LED與STM32F407相連,限流電阻為1K。 三、 實(shí)驗(yàn)原理 實(shí)驗(yàn)中,通過TIM3實(shí)現(xiàn)500ms定時,每過500ms,LED顏色變化一次,三色LED按定時間隔交替閃爍。 四、 源代碼 1.主函數(shù) - /*
- * Name : main
- * Description : ---
- * Author : ysloveivy.
- *
- * History
- * --------------------
- * Rev : 0.00
- * Date : 11/30/2015
- *
- * create.
- * --------------------
- */
- int main(void)
- {
- //定時500ms,每隔500ms三色LED燈閃爍一次
- led.initialize();
- timer3.initialize();
- while(1){
- }
- }
復(fù)制代碼2.TIM3初始化代碼 - /*
- * Name : initialize
- * Description : ---
- * Author : ysloveivy.
- *
- * History
- * --------------------
- * Rev : 0.00
- * Date : 11/30/2015
- *
- * create.
- * --------------------
- */
- static int initialize(void)
- {
- TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
- NVIC_InitTypeDef NVIC_InitStructure;
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); //使能TIM3時鐘
- TIM_TimeBaseInitStructure.TIM_Period = 4999; //設(shè)置自動重載值
- TIM_TimeBaseInitStructure.TIM_Prescaler = 8399; //設(shè)置定時器預(yù)分頻系數(shù)
- TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
- //設(shè)置時鐘分頻因子
- TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上計(jì)數(shù)模式
- TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);
- TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //使能TIM3更新中斷
- TIM_Cmd(TIM3,ENABLE); //使能TIM3
- //中斷優(yōu)先級分組
- NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;
- NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- return 0;
- }
- /*
- * Name : TIM3_IRQHandler
- * Description : ---
- * Author : ysloveivy.
- *
- * History
- * -------------------
- * Rev : 0.00
- * Date : 30/11/2015
- *
- * create.
- * -------------------
- */
- void TIM3_IRQHandler(void)
- {
- static int counter = 0;
- //定時500ms,每隔500ms三色LED燈閃爍一次
- if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET)
- {
- if(counter % 3 == 0){
- LED_RED_ON;
- LED_BLUE_OFF;
- LED_GREEN_OFF;
- }else if(counter % 3 == 1){
- LED_RED_OFF;
- LED_BLUE_ON;
- LED_GREEN_OFF;
- }else if(counter % 3 == 2){
- LED_RED_OFF;
- LED_BLUE_OFF;
- LED_GREEN_ON;
- }
- counter ++;
- }
- TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
- }
復(fù)制代碼3.定時器初始化結(jié)構(gòu)體 - typedef struct
- {
- uint16_t TIM_Prescaler;
- uint16_t TIM_CounterMode;
- uint32_t TIM_Period;
- uint16_t TIM_ClockDivision;
- uint8_t TIM_RepetitionCounter;
- } TIM_TimeBaseInitTypeDef;
復(fù)制代碼 TIM_Prescaler:定時器預(yù)分頻系數(shù),0x0000- 0xFFFF。 TIM_CounterMode:計(jì)數(shù)模式,可選擇向上計(jì)數(shù) 、向下計(jì)數(shù)和中央對其模式。 TIM_Period:定時器自動重載值,0x0000- 0xFFFF TIM_ClockDivision:時鐘分頻因子,可選擇1、2和4分頻。 TIM_RepetitionCounter:重復(fù)計(jì)數(shù)值,重復(fù)溢出相應(yīng)的次數(shù),進(jìn)入中斷。 五、 實(shí)驗(yàn)現(xiàn)象 iCore3 雙核心板三色LED每500ms交替閃爍。 六、 代碼包下載
|