當前位置:編程學習大全網 - 編程語言 - stm32獲取定時器溢出狀態但不中斷

stm32獲取定時器溢出狀態但不中斷

前期準備:

STM32CubeMX

STM32RCT6核心板

IDE Keil(MDK-ARM)

STM32CubeMX部分

1. 配置時鐘

選擇STM32F103RCTx系列芯片,配置時鐘的同時會自動配置IO口引腳

在這裏插入圖片描述

將HCLK設置為最大頻率72MHz

在這裏插入圖片描述

2.配置TIM

在這裏插入圖片描述

Internal Clock(內部時鐘)

Prtscaler (定時器分頻系數) : 71

Counter Mode(計數模式) Up(向上計數模式)

Counter Period(自動重裝載值) : 999

CKD(時鐘分頻因子) :No Division (不分頻 )

auto-reload-preload(自動重裝載) : Enable (使能)

在這裏插入圖片描述

勾選update interrupt(更新中斷)

1. 定時器溢出時間計算公式:

在這裏插入圖片描述

Tout:中斷溢出的時間

arr:自動重裝載值

psc:定時器分頻系數

Tclk:時鐘頻率

Tout = ((71+1)*(999+1))/72 us

Tout = ( 72 * 1000 ) / 72 us

1000us = 1ms

所以這裏我們的定時時間為:1ms

也就是說單片機1ms進入壹次定時器中斷

2. 定時器計數模式:

向上計數模式:計數器從0計數到自動加載值(TIMx_ARR),然後重新從0開始計數並且產生壹個計數器溢出事件。

向下計數模式:計數器從自動裝入的值(TIMx_ARR)開始向下計數到0,然後從自動裝入的值重新開始,並產生壹個計數器向下溢出事件。

向上/向下計數模式(中央對齊模式):計數器從0開始計數到自動裝入的值-1,產生壹個計數器溢出事件,然後向下計數到1並且產生壹個計數器溢出事件;然後再從0開始重新計數。

在這裏插入圖片描述

2. 計數時鐘:

內部時鐘(TIMx_CLK):

外部時鐘模式1:外部捕捉比較引腳(TIx)

外部時鐘模式2:外部引腳輸入(TIMx_ETR)

內部觸發輸入(ITRx):使用壹個定時器作為另壹個定時器的預分頻器,如可以配置壹個定時器Timer1而作為另壹個定時器Timer2的預分頻器。

3.配置IO口

在這裏插入圖片描述

將PB0設置為:

低電平

Output模式

既不上拉也不下拉

響應速度低

4. 工程生成

在這裏插入圖片描述

在這裏插入圖片描述

工程管理依舊是這幾個選項,然後GENERATE CODE,STM32CubeMX部分完成。

MDK 5部分

HAL_TIM_IRQHandler(&htim1);//定時器中斷處理函數

此函數的作用是判斷中斷是否正常,是哪壹類定時器中斷(溢出中斷/捕獲中斷/PWM中斷…),然後進入相應的中斷回調函數

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)//定時器溢出中斷回調函數

定時器中斷時,每進行完壹個中斷,並不會立刻退出,而是會進入到中斷回調函數中

點開main.c在這裏插入圖片描述

在如圖位置上添加

HAL_TIM_Base_Start_IT(&htim1);//開啟定時器1

1

1

然後再tim.c文件中,添加

/* USER CODE BEGIN 0 */

uint16_t Tim_cnt = 0; //定時器計數

/* USER CODE END 0 */

1

2

3

1

2

3

然後在tim.c文件中重寫

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)函數

在這裏插入圖片描述

/* USER CODE BEGIN 1 */

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

{

if (htim->Instance == htim1.Instance)

{

Tim_cnt++;

if(Tim_cnt==500) //0.5s進行壹次下列代碼

{

Tim_cnt=0; //清0

HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);

}

}

}

/* USER CODE END 1 */

1

2

3

4

5

6

7

8

9

10

11

12

13

14

1

2

3

4

5

6

7

8

9

10

11

12

13

14

設壹個全局變量,每進壹次中斷+1,因為1ms進入壹次中斷,所以當Tim_cnt=500的時候(即0.5s)寫入我們需要運行的代碼(不要忘記清0)

編譯下載時需要選擇相對應的下載器,勾選以下

在這裏插入圖片描述

運行即可

本期工程文檔——>Gitee

在這裏插入圖片描述

  • 上一篇:簡單的編程主題
  • 下一篇:微信小程序真的可以取代app嗎?
  • copyright 2024編程學習大全網