找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 3611|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

[零基礎(chǔ)學(xué)習(xí)STM32]第十二講:通用定時器—定時點(diǎn)亮LED

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:278743 發(fā)表于 2018-4-11 11:56 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
一、 概述
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ù)
  1. /*
  2. * Name                : main
  3. * Description         : ---
  4. * Author              : ysloveivy.
  5. *
  6. * History
  7. * --------------------
  8. * Rev                 : 0.00
  9. * Date                : 11/30/2015
  10. *
  11. * create.
  12. * --------------------
  13. */
  14. int main(void)
  15. {
  16.         //定時500ms,每隔500ms三色LED燈閃爍一次
  17.         led.initialize();
  18.         timer3.initialize();
  19.         while(1){
  20.         }
  21. }
復(fù)制代碼
2.TIM3初始化代碼
  1. /*
  2. * Name                : initialize
  3. * Description         : ---
  4. * Author              : ysloveivy.
  5. *
  6. * History
  7. * --------------------
  8. * Rev                 : 0.00
  9. * Date                : 11/30/2015
  10. *
  11. * create.
  12. * --------------------
  13. */

  14. static int initialize(void)
  15. {
  16.         TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
  17.         NVIC_InitTypeDef NVIC_InitStructure;

  18.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);           //使能TIM3時鐘

  19.         TIM_TimeBaseInitStructure.TIM_Period = 4999;               //設(shè)置自動重載值
  20.         TIM_TimeBaseInitStructure.TIM_Prescaler = 8399;           //設(shè)置定時器預(yù)分頻系數(shù)
  21.         TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  22.         //設(shè)置時鐘分頻因子
  23.         TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;   //向上計(jì)數(shù)模式
  24.         TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);

  25.         TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);                  //使能TIM3更新中斷
  26.         TIM_Cmd(TIM3,ENABLE);                                  //使能TIM3

  27.         //中斷優(yōu)先級分組
  28.         NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
  29.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;
  30.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;
  31.         NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
  32.         NVIC_Init(&NVIC_InitStructure);

  33.         return 0;
  34. }

  35. /*
  36. * Name                : TIM3_IRQHandler
  37. * Description         : ---
  38. * Author              : ysloveivy.
  39. *
  40. * History
  41. * -------------------
  42. * Rev                 : 0.00
  43. * Date                : 30/11/2015
  44. *
  45. * create.
  46. * -------------------
  47. */
  48. void TIM3_IRQHandler(void)
  49. {
  50.         static int counter = 0;

  51.         //定時500ms,每隔500ms三色LED燈閃爍一次
  52.         if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET)
  53.         {
  54.                 if(counter % 3 == 0){
  55.                         LED_RED_ON;
  56.                         LED_BLUE_OFF;
  57.                         LED_GREEN_OFF;
  58.                 }else if(counter % 3 == 1){
  59.                         LED_RED_OFF;
  60.                         LED_BLUE_ON;
  61.                         LED_GREEN_OFF;
  62.                 }else if(counter % 3 == 2){
  63.                         LED_RED_OFF;
  64.                         LED_BLUE_OFF;
  65.                         LED_GREEN_ON;
  66.                 }
  67.                 counter ++;
  68.         }
  69.         TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
  70. }
復(fù)制代碼
3.定時器初始化結(jié)構(gòu)體
  1. typedef struct
  2. {
  3.   uint16_t TIM_Prescaler;                                               
  4.   uint16_t TIM_CounterMode;      
  5.   uint32_t TIM_Period;         
  6.   uint16_t TIM_ClockDivision;   
  7.   uint8_t TIM_RepetitionCounter;  
  8. } 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交替閃爍。
六、 代碼包下載
       網(wǎng)盤:http://pan.baidu.com/s/1kTWAAJ9


iCore3_12_TIMER.rar

851.49 KB, 下載次數(shù): 16, 下載積分: 黑幣 -5

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表