單片機學習!
目錄
?編輯
1. 函數TIM_DeInit
2. 函數TIM_TimeBaseInit?配置時基單元
3. 函數TIM_TimeBaseStructInit
4. 函數TIM_Cmd 運行控制
5. 函數TIM_ITConfig?中斷輸出控制
6.?時基單元的時鐘選擇函數
6.1 函數TIM_InternalClockConfig
6.2 函數?TIM_ITRxExternalClockConfig
6.3 函數?TIM_TIxExternalClockConfig
6.4 函數?TIM_ETRClockMode1Config
6.5 函數?TIM_ETRClockMode2Config
6.6 函數?TIM_ETRConfig
7.單獨更改參數的函數
7.1 函數?TIM_PrescalerConfig
7.2 函數?TIM_CounterModeConfig
7.3 函數?TIM_ARRPreloadConfig
7.4 函數?TIM_SetCounter
7.5 函數?TIM_SetAutoreload
8.函數?TIM_GetCounter
9.函數?TIM_GetPrescaler
10.用來獲取標志位和清除標志位的函數
10.1 函數?TIM_GetFlagStatus
10.2 函數?TIM_ClearFlag
10.3 函數?TIM_GetITStatus
10.4 函數?TIM_ClearITPendingBit
1. 函數TIM_DeInit
? ? ? ? 函數用于恢復缺省配置。
2. 函數TIM_TimeBaseInit?配置時基單元
????????函數用于時基單元初始化。
兩個參數:
- TIMx選擇某個定時器。
- 結構體,里面包含了配置時基單元的一些參數。
????????TIM_Period 設置了在下一個更新事件裝入活動的自動重裝載寄存器周期的值。它的取值必須在 0x0000 和 0xFFFF 之間。
????????TIM_Prescaler 設置了用來作為 TIMx 時鐘頻率除數的預分頻值。它的取值必須在 0x0000 和 0xFFFF 之間。
????????TIM_ClockDivision 設置了時鐘分割。該參數取值見下表。
????????TIM_CounterMode 選擇了計數器模式。該參數取值見下表。
代碼示例:
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;TIM_TimeBaseInitStructure.TIM_ClockDivision= TIM_CKD_DIV1;//指定時鐘分頻TIM_TimeBaseInitStructure.TIM_CounterMode= TIM_CounterMode_Up;//計數器模式TIM_TimeBaseInitStructure.TIM_Period= 10000-1;//ARR自動重裝器的值,決定定時時間TIM_TimeBaseInitStructure.TIM_Prescaler= 7200-1;//PSC預分頻器的值,決定定時時間,TIM_TimeBaseInitStructure.TIM_RepetitionCounter= 0;//重復計數器的值。TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);
????????定時時間可用計數器溢出頻率公式計算,定時頻率=72M/(PSC+1)/(ARR+1)。
對應圖中配置時基單元的部分:
3. 函數TIM_TimeBaseStructInit
? ? ? ? 函數把結構體變量賦一個默認值。
? ? ? ? 下表給出了TIM_TimeBaseInitStruct各個成員的缺省值:
4. 函數TIM_Cmd 運行控制
? ? ? ? 函數用于使能計數器。
兩個參數:
- TIMx選擇某個定時器。
- NewState新的狀態,也就是使能還是失能,使能計數器可以運行;失能計數器不運行。
對應圖中運行控制的位置:
代碼示例:
TIM_Cmd(TIM2,ENABLE);
5. 函數TIM_ITConfig?中斷輸出控制
? ? ? ? 函數用于使能中斷輸出信號。
三個參數:
- TIMx選擇某個定時器。
- TIM_IT選擇要配置哪個中斷輸出。
- NewState新的狀態,使能還是失能。
????????輸入參數 TIM_IT 使能或者失能 TIM 的中斷。可以取下表的一個或者多個取值的組合作為該參數的值。
對應圖中中斷輸出控制的位置,用于使能外設的中斷輸出。
代碼示例:
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
6.?時基單元的時鐘選擇函數
????????可以選擇RCC內部時鐘、ETR外部時鐘、ITRx其他定時器、TIx捕獲通道。
對應圖中時基單元的時鐘選擇部分
6.1 函數TIM_InternalClockConfig
? ? ? ? 函數用于選擇內部時鐘,參數只有一個TIMx。
對應圖中選擇:
代碼示例:
TIM_InternalClockConfig(TIM2);
6.2 函數?TIM_ITRxExternalClockConfig
? ? ? ? 函數用于選擇ITRx其他定時器的時鐘。
兩個參數:
- TIMx,選擇要配置的定時器。
- TIM_InputTriggerSource,選擇要接入哪個其他定時器。
????????TIM_InputTriggerSource 選擇 TIM 輸入觸發。
對應圖中選擇:
6.3 函數?TIM_TIxExternalClockConfig
? ? ? ? 函數用于選擇TIx捕獲通道的時鐘。
四個參數:
- TIMx,選擇要配置的定時器。
- TIM_TIxExternalCLKSource選擇TIx具體的某個引腳。
- TIM_ICPolarity,輸入的極性。
- ICFilter,輸入濾波器。
????????對于外部引腳的波形,一般都會有極性選擇和濾波器,這樣更靈活一些
????????TIM_TIxExternalCLKSource選擇TIMx外部時鐘源。
對應圖中選擇:
6.4 函數?TIM_ETRClockMode1Config
? ? ? ? 函數用于選擇ETR通過外部時鐘模式1輸入的時鐘。
四個參數:
- TIMx,選擇要配置的定時器。
- TIM_ExtTRGPrescaler外部觸發預分頻器,這里可以對ETR的外部時鐘再提前做一個分頻。
- TIM_ExtTRGPolarity,輸入的極性。
- ExtTRGFilter,輸入濾波器。
????????TIM_ExtTRGPrescaler設置TIMx外部觸發預分頻。
????????TIM_ExtTRGPolarity設置TIMx外部觸發極性。
對應圖中選擇:
6.5 函數?TIM_ETRClockMode2Config
????????函數用于選擇ETR通過外部時鐘模式2輸入的時鐘。
- TIMx,選擇要配置的定時器。
- TIM_ExtTRGPrescaler外部觸發預分頻器,這里可以對ETR的外部時鐘再提前做一個分頻。
- TIM_ExtTRGPolarity,輸入的極性。
- ExtTRGFilter,輸入濾波器。
對應圖中選擇:
總結:
????????對于ETR輸入的外部時鐘而言,函數?TIM_ETRClockMode1Config和函數TIM_ETRClockMode2Config是等效的,函數參數也是一樣的,如果不需要觸發輸入的功能,那兩個函數可以互換。
6.6 函數?TIM_ETRConfig
? ? ? ? 函數用來單獨用來配置ETR引腳的預分頻器、極性、濾波器這些參數的。
7.單獨更改參數的函數
????????在初始化結構體里有很多關鍵的參數,如自動重裝器的目標值和預分頻值等,這些參數可能會在初始化之后還需要更改,以下函數可以方便更改這些關鍵參數。
7.1 函數?TIM_PrescalerConfig
? ? ? ? 函數用來單獨寫預分頻值。
兩個參數:
- Prescaler就是要寫入的預分頻值。
- TIM_PSCReloadMode寫入的模式。
????????預分頻器有一個緩沖器,寫入的值是在更新事件發生后才有效的。所以這里有個寫入模式,可以選擇是聽從安排在更新事件生效,或者是再寫入后手動產生一個更新事件,讓這個值立刻生效。
????????TIM_PSCReloadMode選擇預分頻重載模式。
7.2 函數?TIM_CounterModeConfig
? ? ? ? 函數用來改變計數器的計數模式。
兩個參數:
- TIMx,選擇要配置的定時器。
- TIM_CounterMode,選擇新的計數器模式。
7.3 函數?TIM_ARRPreloadConfig
????????自動重裝寄存器預裝功能配置。計數器的預裝功能可以根據需要選擇配置,調用這個函數,參數選擇使能還是失能來控制計數器預裝功能。
7.4 函數?TIM_SetCounter
????????給計數器寫入一個值,調用這個函數可以手動給一個計數值。
7.5 函數?TIM_SetAutoreload
????????給自動重裝寄存器寫入一個目標值,調用這個函數可以手動給一個目標值。
8.函數?TIM_GetCounter
????????獲取當前計數器的值,調用這個函數可以查看當前計數器記到哪里了,返回值就是當前計數器的值。
9.函數?TIM_GetPrescaler
????????獲取當前預分頻器的值,調用這個函數可以查看預分頻值。
10.用來獲取標志位和清除標志位的函數
10.1 函數?TIM_GetFlagStatus
????????TIM_FLAG 待檢查的標志位,下表給出了所有可以被函數TIM_ GetFlagStatus檢查的標志位列表。