STM32定時器時間的計算方法
STM32中的定時器有很多用法:
(一)系統(tǒng)時鐘(SysTick)
設(shè)置非常簡單,以下是產(chǎn)生1ms中斷的設(shè)置,和產(chǎn)生10ms延時的函數(shù):
void RCC_Configuration(void)
{
RCC_ClocksTypeDef RCC_ClockFreq;
SystemInit();//源自system_stm32f10x.c文件,只需要調(diào)用此函數(shù),則可完成RCC的配置.
RCC_GetClocksFreq(&RCC_ClockFreq);
//SYSTICK分頻--1ms的系統(tǒng)時鐘中斷
if (SysTick_Config(SystemFrequency / 1000))
{
while (1); // Capture error
}
}
void SysTick_Handler(void)//在中斷處理函數(shù)中的程序
{
while(tim)
{
tim--;
}
}
//調(diào)用程序:
Delay_Ms(10);
當(dāng)然,前提是要設(shè)置好,變量tim要設(shè)置成volatile類型的。
(二)第二種涉及到定時器計數(shù)時間(TIMx)
TIM_TimeBaseStructure.TIM_Prescaler = 2; //預(yù)分頻(時鐘分頻)72M/(2+1)=24M
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上計數(shù)
TIM_TimeBaseStructure.TIM_Period = 65535; //裝載值18k/144=125hz
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x0;
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
定時時間計算:
TIM_TimeBaseStructure.TIM_Prescaler = 2;
//分頻2 72M/(2+1)/2=24MHz
TIM_TimeBaseStructure.TIM_Period = 65535; //計數(shù)值65535
((1+TIM_Prescaler )/72M)*(1+TIM_Period )=((1+2)/72M)*(1+65535)=0.00273秒=366.2Hz */
注意兩點(來自大蝦網(wǎng),未經(jīng)檢驗)
(1)TIMx(1-8),在庫設(shè)置默認(rèn)的情況下,都是72M的時鐘;
(2)TIM_TimeBaseStructure.TIM_RepetitionCounter=0;
是重復(fù)計數(shù),就是重復(fù)溢出多少次才給你來一個溢出中斷,
它對應(yīng)的寄存器叫TIM1 RCR.
如果這個值不配置,上電的時候寄存器值可是隨機的,本來1秒中斷一次,可能變成N秒中斷一次,讓你超級頭大!
假設(shè)系統(tǒng)時鐘是72Mhz,TIM1是由PCLK2(72MHz)得到,TIM2-7是由PCLK1得到
關(guān)鍵是設(shè)定時鐘預(yù)分頻數(shù),自動重裝載寄存器周期的值
定時器的基本設(shè)置
1、 TIM_TimeBaseStructure.TIM_Prescaler = 7199;//時鐘預(yù)分頻數(shù) 例如:時
鐘頻率=72/(時鐘預(yù)分頻+1)
2、TIM_TimeBaseStructure.TIM_Period = 9999; //自動重裝載寄存器周期的值(定時
時間) 累計0xFFFF個頻率后產(chǎn)生個更新或者中斷(也是說定時時間到)
3、 TIM_TimeBaseStructure.TIM_CounterMode = TIM1_CounterMode_Up; //定時器
模式 向上計數(shù)
4、TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; //時間分割值
5、TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);//初始化定時器2
6、TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); //打開中斷 溢出中斷
7、TIM_Cmd(TIM2, ENABLE);//打開定時器
或者:
TIM_TimeBaseStructure.TIM_Prescaler = 35999;//分頻35999 72M/
(35999+1)/2=1Hz 1秒中斷溢出一次
TIM_TimeBaseStructure.TIM_Period = 2000; //計數(shù)值2000
((1+TIM_Prescaler )/72M)*(1+TIM_Period )=((1+35999)/72M)*(1+2000)=1秒*/
STM32通用定時器的基本定時器功能實現(xiàn)燈閃爍
#include "stm32f10x.h"
#include "misc.h"
void RCC_Configuration(void);
void NVIC_Configuration(void);
void GPIO_Configuration(void);
void TIM3_Configuration(void);
int main(void)
{
RCC_Configuration();
NVIC_Configuration();
GPIO_Configuration();
TIM3_Configuration();
TIM_ClearFlag(TIM3, TIM_FLAG_Update);
TIM_ARRPreloadConfig(TIM3, DISABLE);
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
TIM_Cmd(TIM3, ENABLE);
while (1) {
;
}
}
void TIM3_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Period = 9999;
TIM_TimeBaseStructure.TIM_Prescaler = 7199;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
}
void RCC_Configuration(void)
{
SystemInit();
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
}
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
#include "stm32f10x_it.h"
void TIM3_IRQHandler(void)
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) {
TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
GPIO_WriteBit(GPIOC, GPIO_Pin_7, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_7)));
}
}
- PC官方版
- 安卓官方手機版
- IOS官方手機版















最好看最實用的桌面時鐘1.1 電腦版
人生搬磚倒計時軟件1.0 綠色版
桌面太空人gif時鐘1.1 動態(tài)版
地支時鐘1.0pc版
電腦每日備忘錄4.0 單文件免費版
冪果倒數(shù)紀(jì)念日最新版1.0官方版
邁普爾倒計時軟件1.0 中文免費版
楓葉標(biāo)準(zhǔn)時間同步工具1.1 中文綠色版
匯笨陽光多功能日歷1.2 綠色中文版
小咖日歷9.0.3.0 官方版
云日歷電腦版1.2.9 免費版
會議倒計時器軟件3.07 電腦版
休息提醒助手免費版
優(yōu)效日歷2.2.2.10 官方最新版
華夏定時自動關(guān)機1.0 中文綠色版
定時工兵1.81 中文免費版
京鼎電腦石英鐘1.0 電腦版
蕾姆整點報時工具1.0.0 最新免費版
System Time系統(tǒng)時間同步器1.0.0 綠色中文版
VueMinder Ultimate破解版2018.00 最新破解版【附注冊機】
小強鬧鐘綠色免費版
桌面日歷(desktopcal)2.3.107.5558 免費版
曉日程桌面日歷2.1.0.13 電腦版
人生日歷2021最新版5.2.12.384 官方版
美捷鬧鐘軟件2.1.0.6 免費版
快快日歷1.0.1.22 桌面版
飛雪桌面日歷9.7.1.5256綠色免費版
免費時間管理軟件(效能時間管理)5.60.556官方最新版
阿Q日歷軟件1.0.1126.99中文免費版





提醒小鬧鐘(電腦鬧鐘)1.0 綠色免費版
蛐蛐迷你鬧鐘1.2 綠色版
上下班打卡提醒軟件7.0 免費版 【僅僅174KB
AtomTime98 V2.21 中文實時電腦時鐘校對軟件
綠光辯論賽計時器1.6 最新免費版
日程提醒軟件(Remind-me)8.0 官方版
大漠駝鈴桌面日歷1.0.0.4 免費最新版 【帶農(nóng)
DoDo時鐘2.0 【電腦時鐘】綠色免費版
多功能日歷時鐘1.0官方版
概念版Gamma小鬧鐘0.1.70官方最新版