微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32在系统时钟为72M下的几个延时函数

STM32在系统时钟为72M下的几个延时函数

时间:11-21 来源:互联网 点击:
//粗延时函数,微秒
  • void delay_nus(u16 time)
  • {
  • u16 i=0;
  • while(time--)
  • {
  • i=10;//自己定义
  • while(i--) ;
  • }
  • }
//毫秒级的延时
  • void delay_nms(u16 time)
  • {
  • u16 i=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); 

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top