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

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

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

更多詳細資料請聯系.docx

共1個文件

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

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

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

img

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

img

img

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

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

#include "sys.h"
/*
函數功能:設置NVIC中斷控制器優(yōu)先級
函數形參:
		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); //設置優(yōu)先級分組,每個工程只能設置一次
   Priority=NVIC_EncodePriority(NVIC_PriorityGroup_2,PreemptPriority,SubPriority); //編碼優(yōu)先級
   NVIC_SetPriority(IRQn,Priority); //設置優(yōu)先級
   NVIC_EnableIRQ(IRQn);
}

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

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

【3】使用滴答定時器編寫延時函數

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

#include "delay.h"

/*
功能  :毫秒級別的延時函數
參數  :填入延時的時間
返回值:無
說  明:頻率在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++);
}


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

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


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


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


  • 更多詳細資料請聯系.docx
    下載
意法半導體

意法半導體

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

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

查看更多

相關推薦