【STM32學習筆記】第二章:STM32的定時器中斷配置

  第一章我給大家講解了關於STM32最基本的GPIO知識,這一章我給大家講接一下定時器的知識。
  什麼是定時器?,它是類似於秒錶樣的東西,它是一個單片機用來計時的工具。
  什麼是中斷?,中斷好比你在做一件事情突然被另外一件事情打斷,然後去做另外一件事情。等另外一件事情做完了以後,又回來做之前做的事情。比如我在炒菜突然開水壺開了,那麼我就去先把火關了以後再回來炒菜。
  我們可以通過定時器中斷去做一些什麼操作呢?,我們可以通過定時器去做一些規律性或者週期性活動。比如定時採集電壓值、獲取溫溼度等一些需要實時監測的值。
下面我給大家來介紹一下定時器的內部配置。

一、準備工作

這裏我們要想配置定時器並驗證需要的準備工作如下:

1、MDK for ARM(KEIL5)或者IAR FOR ARM(這個是軟件必備開發平臺)

2、一塊STM32最小系統開發板(這個是驗證軟件的平臺)

3、這裏最好有一本關於STM32學習的書籍(這裏就不推薦了,網上有一大把)

4、萬用表(測試硬件是否正常工具)

二、具體的操作

1、工程建立

  這裏我們需要一個根據自己的開發板配套的基礎工程。工程建立就不多說了可以參考我的STM32CUBUMX工程建立博客,或者用其它的Demo例程。定時器配置參考例程

2、定時器初始化配置

  下面我給大家分享一部分代碼。

  htim1.Instance = TIM1;
  htim1.Init.Prescaler = 7200-1;
  htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim1.Init.Period = 10000-1;
  htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim1.Init.RepetitionCounter = 0;
  htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;

從上面代碼我們可以看到HAL庫裏面的定時器1(TIM1)配置,首先
1)htim1.Instance = TIM1;
這句話是外設設備選擇定時器1。
2)htim1.Init.Prescaler = 7200-1;
這裏是設置定時器的分頻係數,這裏取決於單片機的時鐘線給定時器分配的時鐘。我們單片機配置的是72M主頻,這裏我們要把定時器分頻爲10K的時鐘頻率,這樣方便我們計算定時器的具體定時時間。
3)htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
這裏設定的是定時器的計數模式,TIM_COUNTERMODE_UP這個是指向上計數。
4)htim1.Init.Period = 10000-1;
這裏是設置的定時器向上計數的最大值。這裏設置的10K,意思是計數10k才觸發一次中斷,而定時器時鐘也是10K,所以這裏定時的時間是1秒鐘。
5)htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
這裏也是設置時鐘分頻係數,我們這裏填寫TIM_CLOCKDIVISION_DIV1是代表不分頻。
6)htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
這裏設置的是定時器自動重裝他的上限值,因爲每定時完成一次中斷他的htim1.Init.Period會清零,如果想要不停地產生1S的定時器中斷,這裏必須設置成TIM_AUTORELOAD_PRELOAD_ENABLE使能定時器自動重裝。

3、定時器使用

定時器是以中斷的方式去使用的代碼如下:

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if (htim->Instance == htim1.Instance)
	{
		LED ^= 1;
	}
}

這裏是給大家粘貼了HAL庫裏面的定時器中斷。
我這裏中斷處理是將LED這個變量異或去反,這裏大家可以去自己設定想要的功能哦。

4、總結

總的來說,定時器配置在STM32裏面比較的簡單易懂。希望大家認真讀懂我寫的文章,玩轉STM32還是沒問題的!~

有問題歡迎加 QQ:380390633,樂意給大家答疑~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章