• 方案介紹
    • 【1】介紹滴答定時器的章節(jié)
    • 【2】滴答定時器的示例代碼
    • 【3】使用滴答定時器編寫延時函數(shù)
  • 附件下載
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

STM32F407 滴答定時器配置方法、使用方式和示例代碼

04/02 09:56
323
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

更多詳細(xì)資料請聯(lián)系.docx

共1個文件

介紹STM32F407滴答定時器配置方法、使用方式,封裝延時函數(shù)得到精確的時間。

【1】介紹滴答定時器的章節(jié)

STM32F407參考手冊中第10章介紹了滴答定時器的校準(zhǔn)值。

img

M4權(quán)威指南介紹滴答定時器的章節(jié),M3權(quán)威指南中與M4權(quán)威指南中的介紹一樣。

img

img

【2】滴答定時器的示例代碼

在sys.c文件中增加滴答定時器的代碼

#include "sys.h"
/*
函數(shù)功能:設(shè)置NVIC中斷控制器優(yōu)先級
函數(shù)形參:
		IRQn_Type IRQn:中斷線
		uint32_t PreemptPriority:搶占優(yōu)先級
		uint32_t SubPriority:次優(yōu)先級
*/
void SetNVICPriorityGrouping(IRQn_Type IRQn,uint32_t PreemptPriority, uint32_t SubPriority)
{
	 uint32_t Priority;
	 NVIC_SetPriorityGrouping(NVIC_PriorityGroup_2); //設(shè)置優(yōu)先級分組,每個工程只能設(shè)置一次
   Priority=NVIC_EncodePriority(NVIC_PriorityGroup_2,PreemptPriority,SubPriority); //編碼優(yōu)先級
   NVIC_SetPriority(IRQn,Priority); //設(shè)置優(yōu)先級
   NVIC_EnableIRQ(IRQn);
}

/*
函數(shù)功能:滴答時鐘初始化配置
注意:SysTick->LOAD是一個24位的寄存器,單次最大延時時間為894.7848ms
說明:18750是滴答定時器的校準(zhǔn)值。當(dāng)重載值為18750時,滴答定時器剛好產(chǎn)生1ms的中斷
*/
void SysTickInit(void)
{	
	SysTick->CTRL&=~(1<<2); //選擇外部時鐘源	
	SysTick->CTRL|=1<<1;    //開啟中斷
	SysTick->LOAD=18750*800;//重裝載寄存器,最大24位,最大值:16777215
	SysTick->VAL=0; 			  //清除CNT計數(shù)值
	SysTick->CTRL|=1<<0;    //SysTick 定時器的使能位
}

/*
函數(shù)功能:滴答時鐘中斷服務(wù)函數(shù)
*/
void SysTick_Handler(void)
{
	  LED0=!LED0;
		LED1=!LED1;
}

【3】使用滴答定時器編寫延時函數(shù)

在delay.c文件增加以下代碼

#include "delay.h"

/*
功能  :毫秒級別的延時函數(shù)
參數(shù)  :填入延時的時間
返回值:無
說  明:頻率在168MHZ情況下使用
*/
void DelayMs_168M(u32 time)
{
	u32 a,b,c;
	for(a=0;a<time;a++)
		for(b=0;b<100;b++)
			for(c=0;c<450;c++);
}


/*
功能  :微秒級別的延時函數(shù)
參數(shù)  :填入延時的時間
返回值:無
說  明:頻率在168MHZ情況下使用
*/
void DelayUs_168M(u32 time)
{
	u32 k;
	while(time--)
	{
		k=40;
		while(k--);
	}
}

/*
函數(shù)功能:延時函數(shù)初始化
*/
void DelayInit(void)
{
	SysTick->CTRL&=~(1<<2);  //選擇外部時鐘源	
	SysTick->CTRL&=~(1<<1);  //關(guān)閉中斷
}


/*
函數(shù)功能:延時毫秒的函數(shù)
函數(shù)參數(shù):毫秒的時間
*/
void DelayMs(u32 time)
{
	u32 stat;
	SysTick->LOAD=18750*time; //重裝載寄存器,最大24位,最大值:16777215
	SysTick->VAL=0; 			   //清除CNT計數(shù)值
	SysTick->CTRL|=1<<0;     //SysTick 定時器的使能位
	do
	{
			stat=SysTick->CTRL;  //獲取狀態(tài)位
	}while((!(stat&1<<16))&&(stat&1<<0));
	SysTick->CTRL=0x0; 
}


/*
函數(shù)功能:延時微秒的函數(shù)
函數(shù)參數(shù):毫秒的時間
*/
void DelayUs(u32 time)
{
	u32 stat;
	SysTick->LOAD=18.750*time; //重裝載寄存器,最大24位,最大值:16777215
	SysTick->VAL=0; 			   //清除CNT計數(shù)值
	SysTick->CTRL|=1<<0;     //SysTick 定時器的使能位
	do
	{
			stat=SysTick->CTRL;  //獲取狀態(tài)位
	}while((!(stat&1<<16))&&(stat&1<<0));
	SysTick->CTRL=0x0; 
}


  • 更多詳細(xì)資料請聯(lián)系.docx
    下載
意法半導(dǎo)體

意法半導(dǎo)體

意法半導(dǎo)體(ST)集團(tuán)于1987年6月成立,是由意大利的SGS微電子公司和法國Thomson半導(dǎo)體公司合并而成。1998年5月,SGS-THOMSON Microelectronics將公司名稱改為意法半導(dǎo)體有限公司。意法半導(dǎo)體是世界最大的半導(dǎo)體公司之一,公司銷售收入在半導(dǎo)體工業(yè)五大高速增長市場之間分布均衡(五大市場占2007年銷售收入的百分比):通信(35%),消費(17%),計算機(16%),汽車(16%),工業(yè)(16%)。 據(jù)最新的工業(yè)統(tǒng)計數(shù)據(jù),意法半導(dǎo)體是全球第五大半導(dǎo)體廠商,在很多市場居世界領(lǐng)先水平。例如,意法半導(dǎo)體是世界第一大專用模擬芯片和電源轉(zhuǎn)換芯片制造商,世界第一大工業(yè)半導(dǎo)體和機頂盒芯片供應(yīng)商,而且在分立器件、手機相機模塊和車用集成電路領(lǐng)域居世界前列.

意法半導(dǎo)體(ST)集團(tuán)于1987年6月成立,是由意大利的SGS微電子公司和法國Thomson半導(dǎo)體公司合并而成。1998年5月,SGS-THOMSON Microelectronics將公司名稱改為意法半導(dǎo)體有限公司。意法半導(dǎo)體是世界最大的半導(dǎo)體公司之一,公司銷售收入在半導(dǎo)體工業(yè)五大高速增長市場之間分布均衡(五大市場占2007年銷售收入的百分比):通信(35%),消費(17%),計算機(16%),汽車(16%),工業(yè)(16%)。 據(jù)最新的工業(yè)統(tǒng)計數(shù)據(jù),意法半導(dǎo)體是全球第五大半導(dǎo)體廠商,在很多市場居世界領(lǐng)先水平。例如,意法半導(dǎo)體是世界第一大專用模擬芯片和電源轉(zhuǎn)換芯片制造商,世界第一大工業(yè)半導(dǎo)體和機頂盒芯片供應(yīng)商,而且在分立器件、手機相機模塊和車用集成電路領(lǐng)域居世界前列.收起

查看更多

相關(guān)推薦