单片机
返回首页

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

2016-02-25 来源:eefocus

//粗延时函数,微秒
  • 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的初始化设置:
 void Init_SysTick(void)
 {
  if(SysTick_Config(SystemCoreClock / 1000)) //注意:3.5库中 SystemFrequency 被 SystemCoreClock 取代。
  while(1);
 }
 

延时函数:
 __IO uint32_t TimingDelay;
 void delay_ms(__IO uint32_t nTime)
 {
  TimingDelay = nTime;
  while(TimingDelay != 0);
 }
中断函数:
 extern __IO uint32_t TimingDelay;
 void SysTick_Handler(void)
 {
  if (TimingDelay != 0x00)
  { 
  TimingDelay--;
  }
 }
 

 
 delay_ms(1000); 

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 如何利用ESP8266制作一个简单的四轴飞行器

  • 非常简单的150W功放电路图

  • 如何使用LED驱动器LM3915制作振动计

  • 一个简单的立体声平衡指示器电路

  • 分享一个电网倾角计电路

  • 一种构建12V和230V双直流电源的简单方法

    相关电子头条文章