本節是介紹如何使用CubeMX配置STM32的通用定時器TIM2,實現外部脈沖計數功能。
開發環境:CubeMX+MDK5.27
芯片型號:STM32F103ZET6
時間:2020/07/13
簡介:在上一節中,我們體驗了基本定時器TIM6的定時功能,本節我們將配置通用定時器TIM2來實現外部脈沖計數的功能,上一節中我們使用TIM6進行定時,TIM6的時鍾來源於APB1總線且不可以更改時鍾源,而通用定時器2的時鍾源則可以改變,我們可以選擇它的時鍾源為內部時鍾(即APB1總線)或者外部時鍾,而外部時鍾則由外部觸發引腳ETR引入的脈沖信號提供時鍾。我們正是通過這個外部時鍾來完成脈沖計數的功能。
實現步驟
第一步,在CubeMX中配置TIM2,具體配置如圖

當我們配置了TIM時鍾源為ETR2后,觀察右方的Pinout View可以發現PA15引腳已經被配置為TIM2_ETR引腳,也就是說PA15作為外部時鍾輸入的引腳,因此我們配置相鄰引腳PA14模擬脈沖輸出,將這兩個引腳通過杜邦線相連,方便觀察實驗現象。
第二步,配置PA14引腳作為脈沖輸出引腳

第三步,按鍵及定時器6的配置沿用第三章的配置,如不清楚可點擊3---CubeMX實戰2——狀態機思想實現按鍵判斷
第四步,編寫代碼,在USER CODE BEGIN PV下添加如下代碼
KEY_STATE KeyState = KEY_CHECK; uint8_t KeyFlag = 0; uint8_t Count = 0;//用於存放脈沖計數值
在USER CODE BEGIN 2下添加如下代碼
HAL_TIM_Base_Start_IT(&htim6);//啟動定時器6進行按鍵掃描 HAL_TIM_Base_Start(&htim2);//啟動定時器2進行外部脈沖計數
在USER CODE BEGIN 3下添加如下代碼
if(KeyFlag == 1) { KeyFlag = 0; //模擬輸出一個周期為2ms的脈沖 HAL_GPIO_WritePin(Pulse_GPIO_Port,Pulse_Pin,GPIO_PIN_SET); HAL_Delay(1); HAL_GPIO_WritePin(Pulse_GPIO_Port,Pulse_Pin_GPIO_PIN_RESET); HAL_Delay(1); Count = __HAL_TIM_GET_COUNTER(&htim2); printf("Count is %d\n",Count); }
實驗結果

