基本定時器

2021-08-21 01:41:16 字數 1957 閱讀 3504

一、程式設計要點

1、初始化時基結構體

2、配置中斷優先順序

3、寫中斷服務函式

4、寫主函式

二、定時時間計算

定時時間 = 中斷週期 * 中斷次數   

(以1s為例)

tim_prescaler  ->  timxpsc 暫存器

tim_period     -> arr (自動重裝載暫存器)

timxclk 系統時鐘

ck_clk = 1/(timxclk/(psc+1))                =1

中斷週期 = 1/(ck_clk * arr)                  =0.001s

中斷次數(time) =1000         定時時間 1*0.001*1000=1s

三、結構體&庫函式

1、定時器初始化結構體

typedef struct

tim_timebaseinittypedef;

2、清除中斷標誌函式

void tim_clearflag(tim_typedef* timx, uint16_t tim_flag)

tim_clearflag( basic_timx , tim_flag_update);  //清除中斷標誌

@brief 清除中斷標誌

@param1:tim外設號

@param2:要清除的標誌位

3、tim中斷使能函式

void tim_itconfig(tim_typedef* timx, uint16_t tim_it, functionalstate newstate)

tim_itconfig(basic_timx ,tim_it_update,enable); //開啟中斷使能

@brief :開啟中斷使能

@param1:tim外設號

@param2:中斷源

@param3:使能或失能

四、中斷服務函式

void tim6_irqhandler(void)

五、程式原始碼

1、basic_timer.h

#ifndef __basic_timer_h

#define __basic_timer_h

#include "stm32f10x.h"

#define rcc_apbxperiphclockcmd rcc_apb1periphclockcmd

#define rcc_apbx_periph rcc_apb1periph_tim6

#define basic_timx tim6

#define tim_inqx tim6_irqn

void tim6_init(void);

#endif //__basic_timer_h

2、basic_timer.c

#include "basic_timer.h"

static void tim_nvic_config(void) //配置巢狀向量中斷控制器

static void basic_timerinit(void)

void tim6_init(void)

3、main.c

#include "stm32f10x.h"   // 相當於51微控制器中的  #include #include "bsp_led.h"

#include "exti.h"

#include "basic_timer.h"

uint32_t timer=0;

int main(void) }

}

基本定時器

按定時器的功能可以分為定時,輸出比較 輸出pwm波 輸入捕獲 測量輸入訊號的脈衝寬度,頻率 互補輸出,按照定時器分類可以分為基本定時器 只有定時功能 通用定時器 有前三個功能 高階定時器 有全部功能 對於我們的f103系列有2個高階定時器tim1和tim8,4個通用定時器tim2 3 4 5,2個基...

定時器 STM32定時器 基本定時器1

我是鼎!定時器時鐘一定要明確其中有哪些變數。上圖為stm407資料手冊摘出來的,可能看不清楚,其實就蘊含了幾點資訊。注意一點,我們看圖2,我們以apb1舉例,上面掛著很多的外設,包括usart1 adc 以及定時器,我們知道apb1上面最高時鐘頻率為84mhz,但是定時器的時鐘是要在此基礎上乘2,也...

TIM基本定時器 定時

定時 輸出比較 輸入捕獲 互補輸出 分類 基本定時器 定時 通用定時器 定時 輸出比較 輸入捕獲 高階定時器 定時 輸出比較 輸入捕獲 互補輸出 f103系列的開發板一般是倆個高階定時器tim1 tim8 4個通用定時器tim2 3 4 5 2個基本定時器tim6 7 而根據容量的大小,又稍有區別。...