当前位置:首页 > 单片机 > 单片机
[导读]//粗延时函数,微秒void delay_nus(u16time){ u16 i=0; while(time--){i=10;//自己定义while(i--) ; }}//毫秒级的延时void delay_nms(u16 time){ u16i=0; while(time--){i=12000;//自己定义while(i--) ; }}运用SysTi

//粗延时函数,微秒


void delay_nus(u16time)

{

u16 i=0;

while(time--)

{

i=10;//自己定义

while(i--) ;

}

}

//毫秒级的延时

void delay_nms(u16 time)

{

u16i=0;

while(time--)

{

i=12000;//自己定义

while(i--) ;

}

}

运用SysTick来实现准确定时:

SysTick_Config(SystemCoreClock/ 10)函数的形参就是systick重装定时器的值。

systick计数频率为每秒72000000次,所以7200000次就是1/10秒,也就是100ms。

SysTick是1个24bit递减计数器,通过对SysTick控制与状态寄存器的设置,可选择HCLK时钟(72M)或HCLK的8分频作为SysTick的时钟源。//V3.5默认为HCLK时钟

SysTick的重装寄存器决定了定时器频率。

若SysTick的时钟源是72M,SystemFrequency = 72000000Hz

所以 SysTick_Config(SystemCoreClock/ 1000); 就是1ms时基。

SysTick的初始化设置:voidInit_SysTick(void){if(SysTick_Config(SystemCoreClock/1000))//注意:3.5库中SystemFrequency被SystemCoreClock取代。while(1);}延时函数:__IOuint32_tTimingDelay;voiddelay_ms(__IOuint32_tnTime){TimingDelay=nTime;while(TimingDelay!=0);}中断函数:extern__IOuint32_tTimingDelay;voidSysTick_Handler(void){if(TimingDelay!=0x00){TimingDelay--;}}delay_ms(1000);


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭